if(new string[] {constants.username,Constants.Lowercase}.contains("test"))
代码是否会创建一个对象?请帮忙
答案 0 :(得分:0)
是的,您将创建一个字符串数组的实例 如果你想看看封面下有什么问题
if (new string[] { "a", "b" }.Contains("c")) ;
由此生成的IL将如下所示
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"
newarr
是IL指令,负责创建新对象
看看OpCodes.Newarr
答案 1 :(得分:0)
关键字“new”始终表示正在创建对象。在这种情况下,该对象仅在if语句中有效。在语句之后,对象将被垃圾收集器释放和清理。
答案 2 :(得分:0)
是的,每次都会创建一个新的字符串数组。
选项:
如果它们实际上是常数:switch
:
switch(value) {
case Constants.UserName:
case Constants.LowerCase:
// ...
break;
}
如果它们不变,但不是const
",则可能在静态构造函数中初始化static readonly
/ string[]
的{{1}}个实例(或者他们不改变的范围。