2

こんにちは、このように c# 変数で定義することはできません

if((var input = db.table.FirstOrDefault()) != null)
{
   // and here I could use my 'input' variable
}

しかし、私はこの方法でそれを行うことができます

for(var input = db.table.FirstOrDefault(); input != null; input = null)
{
  //opeartion

}

誰でも理由を教えてもらえますか? if を使ってそれができたらいいと思いませんか?

4

4 に答える 4

2

理由についてinput = db.table.FirstOrDefault()は、ステートメントであり、実際には何も返さないためです。変数に何かを割り当てinputます。何も返さない (つまりステートメントである) ため、他のものと比較することはできません。

には(何かをif返すもの) が必要です。ステートメントと式の違いについて詳しくは、こちらをご覧ください。

これは C とは異なります (私が間違っていなければ) if の値がすべて 0 で、falseそれ以外はすべて ですtrue

C# で得られる最も近いものについては、次のようなことができると思います。

MyClass input = null;
if ((input = db.table.FirstOrDefault()) != null)
{
    // use input here
}

しかし、次のようにすることもできます。

MyClass input = db.table.FirstOrDefault();
if (input != null)
{
    // use input here
}
于 2012-08-02T13:43:23.827 に答える
2

書いてるからだよ

object input = db.table.FirstOrDefault();

書くのとまったく同じです

object input; 
input = db.table.FirstOrDefault();

C# 仕様に準拠しています。

これは、戻り値がないことを意味するため、チェックするものは何もありません!=null

はい、これをだましてコンパイラに変更を加えることは可能だと思いますが、おそらく努力する価値はありません。

于 2012-08-02T13:45:05.920 に答える
2

これは、以前から知られている追跡困難なエラーにつながるためです。

if (var t = true) {}

bool t;
if (t = true) {}

bool t;
if (t == true) {}
于 2012-08-02T13:40:50.177 に答える
0

for ループでは、反復用のインデックス変数を定義します。次のように書くことができます。

var i = 0;
for (; i < x; ++i)
{
    // Some code;
}

ただし、その場合、i変数は反復の外に存在するため、forループは反復のスコープで変数を作成します。では、ifそれが機能するために追加の変数は必要ありません。

于 2012-08-02T13:44:41.610 に答える