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"));
            }
        }
    }

    /// <summary>
    /// 使用参数名的字符串记录
    /// </summary>
    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)));
            }
        }
    }

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

        name = value;
    }
}

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,875评论 0 10
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,507评论 0 5
  • 一、字符串在C#中,字符串是一系列不可修改的Unicode字符,创建字符串后,就不能修改它。要创建字符串,最常用的...
    CarlDonitz阅读 1,317评论 0 2
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,475评论 0 9