2017-07-17 6 views
0
if(new string[] {constants.username,Constants.Lowercase}.contains("test")) 

コードはオブジェクトを作成するかどうかを確認します。以下のコードのオブジェクトを作成しますか?

+0

毎回、新しいアレイが作成されます。しかし、実際に定数であれば...ここでテストするのは何ですか? –

+0

なぜこの小さな配列が気になりますか?コードは読み取り可能で保守可能です。 'if'ステートメントの前に配列を宣言し、意味のある名前を付けます。 –

+0

@TimSchmelter私はそこに介入する必要があります。小さなオブジェクトの割り当ては重要ですが、非常に非常に... *もしそれがホットコードパスにあるならば。これがボタンの中にある場合、UIをクリックしてください...そんなにありません。しかし、配分は決して自由ではありません。 –

答えて

0

はい、毎回新しい文字列配列が作成されます。

オプション:

彼らは実際には定数である場合:switch

switch(value) { 
    case Constants.UserName: 
    case Constants.LowerCase: 
     // ... 
     break; 
} 

彼らは( "不変ではないconst"、多分string[]/HashSet<string>static readonlyインスタンスは静的コンストラクタで初期化されている場合またはスコープが変更されていない範囲で)。

0

はいあなたは文字列配列のインスタンスを作成します。助けてください
、あなたがカバーの下に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

0

キーワード「新規」は、常にオブジェクトが作成されていることを示します。この場合、オブジェクトはif文でのみ有効です。ステートメントの後、オブジェクトは解放され、ガベージコレクタによってクリーンアップされます。

+0

"キーワード "new"は常にオブジェクトが作成されていることを示しますしない。 '新しいDateTime(2017,7,17​​)' - ゼロのオブジェクト。 –

+0

私は、新しいDateTime(..)が指定された引数でDateTimeの新しいオブジェクトを作成することを確信しています。 newは以下のように使用できます。1)演算子2)修飾子3)制限子 – Xzibitee

+0

'DateTime' *は、少なくとも割り当ての意味ではないオブジェクト*ではありません。それは*ボクシングを介して*オブジェクトに*することができますが、それは異なっている –

関連する問題