Effective C#笔记 - 不要用表示符号名称的硬字符串来调用API

很多时候,我们喜欢用数据的名称,类型的名称,或字符串标识符来操作,或者记录。比如,属性的名称的字符串,或者抛出异常标记参数名等。

public class Program
{
    /*
    *使用名称的字符串记录
    */
    private string name;

    public string Name
    {
        get { return name; }
        set
        {
            if(value != name)
            {
                name = value;

                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Name"));
            }
        }
    }

    /// 
    /// 使用参数名的字符串记录
    /// 
    public void GetValueFromString(string value)
    {
        if(string.IsNullOrEmpty(value))
        {
            throw new ArgumentNullException("value");
        }

        name = value;
    }
}

这样的使用有时候会带来一些不便之处,就是,如果后面把name、value改了名称,比如name2、value2,那么原先记录的信息就出现了错误,如果有bug出现在这里,查起来就不是很容易查找了。C#6.0提供nameof()的表达式,这个关键字根据变量名获取包含其名称的字符串,它可以获取类型、变量、接口以及命名空间的名称,符号既可以写成非限定形式,也可以是完全限定的形式。使用起来方便也很简单。

public class Program
{
    /*
    *使用名称的字符串记录
    */
    private string name;

    public string Name
    {
        get { return name; }
        set
        {
            if(value != name)
            {
                name = value;

                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Name)));
            }
        }
    }

    /// 
    /// 使用参数名的字符串记录
    /// 
    public void GetValueFromString(string value)
    {
        if(string.IsNullOrEmpty(value))
        {
            throw new ArgumentNullException(nameof(value));
        }

        name = value;
    }
}

nameof使用起来非常的方便,也不容易出错。同时,它需要应对各种各样的符号,然而它在面对这些符号时也表现出协调一致的行为,因此它总是返回局部名称。

你可能感兴趣的:(Effective C#笔记 - 不要用表示符号名称的硬字符串来调用API)