2

C#にはJavaScriptと同様の操作がありますか|| セッター?

たとえば、JavaScriptで、値がnullかどうかを確認してデフォルトを設定したい場合は、次のようにすることができます。

function foo(val){
    this.name = val || "foo";
}

しかし、C#でこの機能が必要な場合は、次の方法を使用する必要があります。

public Foo(string val)
{
    this.name = (string.IsNullOrEmpty(val) ? "foo" : val);
}

私はこれがささいなことであり、物乞いが選択者になることはできないことを知っていますが、可能であれば、クレイジーなハックや拡張メソッドを含む答えを得るのは避けたいと思います。三項演算子を使用しても問題ありませんが、見逃した言語機能があるかどうかだけが気になりました。

アップデート:

素晴らしい答えがいたるところにありますが、J0HNとアントンが頭に浮かびました。C#は、上記の例のJavaScriptのように「偽の」値を実行しないため、??オペレーターは空の文字列を考慮しません。

お時間を割いていただき、ありがとうございました。

4

5 に答える 5

7

C#にはnull合体演算子がありますが、JavaScriptのすべての奇抜さを処理することはできません。

this.name = val ?? "foo";

空の文字列はfalseJavaScriptにあるため、このC#コードは対応するJSコードとは異なる動作をします。

于 2012-11-15T14:28:03.357 に答える
2

あなたが使用することができます??

private int Foo(string val){
    this.name = val ?? "foo";
}
于 2012-11-15T14:28:00.877 に答える
2

これで行く

this.name = val ?? "foo";
于 2012-11-15T14:28:28.300 に答える
2

SQLの??演算子と本質的に同じ演算子があります。COALESCE

int? a = null; //int? - nullable int
int q = a??1; // q is set to one;

ただし、??文字列の空をチェックしないため、||空の文字列もfalseとして扱うjavascriptと同じ意味を共有しません。

于 2012-11-15T14:29:12.183 に答える
1

うん、使用??:

    private int Foo(string val){
        this.name = val ?? "foo";
    }

詳細については、Msdnを確認してください:?? オペレーター

于 2012-11-15T14:28:35.617 に答える