if(new string[] {constants.username,Constants.Lowercase}.contains("test"))
コードはオブジェクトを作成するかどうかを確認します。以下のコードのオブジェクトを作成しますか?
if(new string[] {constants.username,Constants.Lowercase}.contains("test"))
コードはオブジェクトを作成するかどうかを確認します。以下のコードのオブジェクトを作成しますか?
はい、毎回新しい文字列配列が作成されます。
オプション:
彼らは実際には定数である場合:switch
:
switch(value) {
case Constants.UserName:
case Constants.LowerCase:
// ...
break;
}
彼らは( "不変ではないconst
"、多分string[]
/HashSet<string>
のstatic readonly
インスタンスは静的コンストラクタで初期化されている場合またはスコープが変更されていない範囲で)。
はいあなたは文字列配列のインスタンスを作成します。助けてください
、あなたがカバーの下にhapening何を見たい場合は
if (new string[] { "a", "b" }.Contains("c")) ;
follwing
IL_0001: ldc.i4.2
IL_0002: newarr [mscorlib]System.String
IL_0007: dup
IL_0008: ldc.i4.0
IL_0009: ldstr "a"
IL_000e: stelem.ref
IL_000f: dup
IL_0010: ldc.i4.1
IL_0011: ldstr "b"
IL_0016: stelem.ref
IL_0017: ldstr "c"
のようになります。このことから生成された
IL
newarr
は、新しいオブジェクトの作成に責任があるIL命令です
ここをクリックしてくださいOpCodes.Newarr
キーワード「新規」は、常にオブジェクトが作成されていることを示します。この場合、オブジェクトはif文でのみ有効です。ステートメントの後、オブジェクトは解放され、ガベージコレクタによってクリーンアップされます。
"キーワード "new"は常にオブジェクトが作成されていることを示しますしない。 '新しいDateTime(2017,7,17)' - ゼロのオブジェクト。 –
私は、新しいDateTime(..)が指定された引数でDateTimeの新しいオブジェクトを作成することを確信しています。 newは以下のように使用できます。1)演算子2)修飾子3)制限子 – Xzibitee
'DateTime' *は、少なくとも割り当ての意味ではないオブジェクト*ではありません。それは*ボクシングを介して*オブジェクトに*することができますが、それは異なっている –
毎回、新しいアレイが作成されます。しかし、実際に定数であれば...ここでテストするのは何ですか? –
なぜこの小さな配列が気になりますか?コードは読み取り可能で保守可能です。 'if'ステートメントの前に配列を宣言し、意味のある名前を付けます。 –
@TimSchmelter私はそこに介入する必要があります。小さなオブジェクトの割り当ては重要ですが、非常に非常に... *もしそれがホットコードパスにあるならば。これがボタンの中にある場合、UIをクリックしてください...そんなにありません。しかし、配分は決して自由ではありません。 –