string queryTmp = ...;
string query = !string.IsNullOrEmpty(queryTmp) ? $"?{queryTmp}" : "";
有人说我应该使用string.Empty
代替""
。是他
正确?为什么呢?
所以我试图找出何时使用哪个。
来自https://stackoverflow.com/a/13703103/156458
string.Empty
是只读字段,而""
是编译 时间常数。他们表现不同的地方是:C#4.0或更高版本中的默认参数值
void SomeMethod(int ID, string value = string.Empty) // Error: Default parameter value for 'value' must be a compile-time constant { //... implementation }
开关语句中的案例表达
string str = ""; switch(str) { case string.Empty: // Error: A constant value is expected. break; case "": break; }
属性参数
[Example(String.Empty)] // Error: An attribute argument must be a constant expression, typeof expression // or array creation expression of an attribute parameter type
为什么string.Empty
无法“用作”string
的值
例如,""
可以在以上三个例子中使用吗?
第2部分中的引用是否解释了第1部分中使用的内容?
感谢。
答案 0 :(得分:0)
编译器要求的原因很简单。在某些情况下,编译器必须知道某些东西的实际,字面值。
不要过多详细介绍,请考虑switch
语句。编译器需要知道该值才能生成/优化生成的代码。这就是它需要“常数”的原因。
String.Empty
是一个抽象级别,它使用一个字段隐藏实现,该实现导致一个值,在执行引擎启动时,实际上将String.Empty初始化为{ {1}}。
正如您所看到的,实际上,它们相同。
就选择其中一个而言,还有很多其他帖子可以讨论代码风格,性能等原因。