7

オブジェクト初期化子を使用して、オプションでプロパティの設定を含めることは可能ですか?

例えば:

Request request = new Request
{
    Property1 = something1,
    if(something)
        Property2 = someting2,                                      
    Property3 = something3
};
4

3 に答える 3

4

私が知っているわけではありません。あなたの唯一のオプションは、次のようにすることです:

Request request = new Request
{
    Property1 = something1,
    Property3 = something3
};
if(something)
    request.Property2 = someting2;

または、設定できるデフォルト/ヌル値がある場合は、次のようにすることもできます。

Request request = new Request
{
    Property1 = something1,
    Property2 = something ? someting2 : null,
    Property3 = something3
};   
于 2010-02-10T02:52:12.493 に答える
2

いいえ。オブジェクト初期化子は、set ステートメントのダム シーケンスに変換されます。

明らかに、プロパティをデフォルト値を知っているものに設定するなど、同様のことを達成するためにハックを行うことができます (例: new Request { Property2 = (something ? something2 : null) })。ただし、セッターは引き続き呼び出されます。プロパティのデフォルト値を変更することにしました。したがって、この種のトリックを回避し、古い pre-object-initializer の方法で明示的な set ステートメントを記述して、条件付きの初期化を行うのが最善です。

于 2010-02-10T02:52:02.507 に答える
0

いいえ、これらは静的呼び出しであるため、特定の条件に基づいて実行時に削除または追加することはできません。

次のように、条件付きで値を変更できます。

Foo foo = new Foo { One = "", Two = (true ? "" : "bar"), Three = "" };
于 2010-02-10T02:53:17.577 に答える