1

または、if ステートメントが null を返さない場合 - なぜこの特定のプロパティを割り当てることができないのか。

例:

String stringParam = "some string";

MyClass myclass = new MyClass();

myclass.MyProperty = MyMethod(out stringParam ) ? stringParam : String.Empty;

上記の行の直後にブレークポイントをヒット - 私は MyProperty を評価します - そしてそれは null です!?

MyMethod の戻り値をトリプル チェックしましたが、それは true です (戻り値の型はブール値です)。また、stringParam は MyMethod 内で更新されています。

上記の内容が不正確または間違っていると仮定すると、MyProperty は少なくとも String.Empty と等しくなければなりません。また、MyMethod が true であるが、文字列が更新されている場合、MyProperty は「何らかの文字列」に等しい必要があります。

なぜヌルなのですか?

MyClass 宣言では、アクセス修飾子に関する複雑さはありません。それは簡単です:

public class MyClass()
{
public String MyProperty;
}

注: 命名などの点でコードを簡略化し、わずかに変更しましたが、このコードは私が持っているコードと構文的に同一です。

私が試したこと

私はこれのために構文を変えました、そして驚くべきことに(私にとって)それはうまくいきました!?

if(MyMethod(out stringParam)) { myclass.MyProperty = stringParam; }

評価時に、myclass.MyProperty は期待される更新された stringParam と等しくなります。

理由の説明が欲しいです。out パラメーターに関して、インラインの if ステートメントの動作が異なる場合はありますか?

4

1 に答える 1

1

変更できる場合はMyMethod、これを試してください:

public bool MyMethod(ref string parameter)
{
    // Do something with parameter here...
    return true;
}

そして、電話する

var stringParam = "some string";
var myClass = new MyClass();

myClass.MyProperty = MyMethod(ref stringParam) ? stringParam : string.Empty;
于 2012-09-28T17:14:41.573 に答える