关于何时使用string.Empty或“”的进一步问题?

时间:2017-04-10 18:42:04

标签: c# string

  1. string queryTmp = ...;
    string query = !string.IsNullOrEmpty(queryTmp) ? $"?{queryTmp}" : "";
    

    有人说我应该使用string.Empty代替""。是他 正确?为什么呢?

  2. 所以我试图找出何时使用哪个。

    来自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的值 例如,""可以在以上三个例子中使用吗?

  3. 第2部分中的引用是否解释了第1部分中使用的内容?

  4. 感谢。

1 个答案:

答案 0 :(得分:0)

编译器要求的原因很简单。在某些情况下,编译器必须知道某些东西的实际,字面值。

不要过多详细介绍,请考虑switch语句。编译器需要知道该值才能生成/优化生成的代码。这就是它需要“常数”的原因。

另一方面,

String.Empty是一个抽象级别,它使用一个字段隐藏实现,该实现导致一个值,在执行引擎启动时,实际上将String.Empty初始化为{ {1}}。

正如您所看到的,实际上,它们相同。

就选择其中一个而言,还有很多其他帖子可以讨论代码风格,性能等原因。