2017-10-16 13 views
2

演算子: "BOOL ++" C#で

public void Main() 
{ 
    int i = 0; 
    Console.WriteLine($"I was {i++}, now I is {i}"); 
    bool b = true; 
    Console.WriteLine($"B was {b}, now B is {b}"); 
} 
//I was 0, now I is 1 
//B was True, now B is True 

を有するB値 "インライン" に変更する可能性はありますか?

実用的な必要性:インラインレイザー

bool isActive = true; 
@foreach(var item in list) { 
    <li class="@(isActive-- ? "active": "")">... 
} 

integersと実用例えば

<li class="active">... 
<li class="">... 
<li class="">... 
<li class="">... 
<li class="">... 

回避策を生成するために:あなたは、@を使用することができるはず

int isActive = 1; 
@foreach(var item in list) { 
    <li class="@(isActive-- > 0 ? "active": "")">... 
} 
+0

否定演算子または?あなたはいつでも 'if(b = DoSomething()))' –

+0

を否定演算子のように使うことができます – Serge

+0

「変更する」とはどういう意味ですか? – Amy

答えて

-1

を( )式構文:

<li class="@(isActive ? "active" : " ")">My link here</li> 
+0

私はちょうど最初のアクティブなクラスが必要で、他のものはありません – Serge

+0

あなたは空白以外の部分を残すことができます。動作します – lazydeveloper

+0

私はisActiveが真から偽に一度変更する必要があります。 – Serge

1

代入演算子をインラインで適用できます。あなたのかみそりビューの例あなたは(AB)はこのようにそれを使用することができますについて

// b = !b both assigns false to b and returns assigned value 
Console.WriteLine($"B was {b}, now B is {b = !b}"); 
// B was True, now B is False 

:それは割り当てられた値を返します

bool active = true; 
Console.WriteLine($"B is {(active ? (active = false) ? "" :"active" : "")}"); 
Console.WriteLine($"B is {(active ? (active = false) ? "" : "active" : "")}"); 
Console.WriteLine($"B is {(active ? (active = false) ? "" : "active" : "")}"); 
// outputs B is active 
// B is 
// B is 

ない私はこれをお勧めしていることが、あなたが言ったようにそれだけで言語の質問です。

+0

私のRazorサンプルで作業する方法は? @(isActive?changeIt) – Serge

+0

Integersで解決策を見つけました...しかし、boolはもっと複雑です:) – Serge

0

inliningの変数を変更するという意味でが可能です。

var b = false; 
if((b = !b) == true) { 
    Console.WriteLine("Hi"); 
} 

これは、Hiを印刷します。

同じことがあなたのかみそりの声明のために行く、または文字列のフォーマット中:

Console.WriteLine($"b was {b}, now b is {b = !b}"); 
// b was true, now b is false 

あなたの例については、これは1つのternary ifの文では不可能です。

変数をfalseに設定し、ではなく、の印刷をアクティブに設定できます。

b ? (b = false) : ""; 

は、我々はその後、巣は別のif文はアクティブを印刷することができます。 bは既にfalseであるため、bを否定する必要があります。 else -pathの空の文字列には到達せず、コンパイラを満たすために必要です。

!(b = false) ? "active" : "never reached" 

はそれらを組み合わせた後、私たちが得る:これは最初の項目のためのactiveを放出する

b ? (!(b = false) ? "active" : "") : ""; 

var b = true; 
Console.WriteLine(b ? (!(b = false) ? "active" : "") : ""); // prints "active" 
Console.WriteLine(b ? (!(b = false) ? "active" : "") : ""); // prints "" 
Console.WriteLine(b ? (!(b = false) ? "active" : "") : ""); // prints "" 
+0

ありがとう、更新されたOPの例で、Razorの解決策を提案してください。 – Serge

+0

@Sergeはこの助けをしていますか? – Iqon

+0

私はまた、このアイデアを持っていたので、最終的には放棄されました。読めなかったので...コードに入れてみれば、私はそれが何を意味するのかを理解するでしょう... @evkの例読みやすく...ビット最終的に私はIntegerソリューションを使用しました..私は自分のために良い解決策を見つけませんでした... – Serge

関連する問題