很多时候,我们喜欢用数据的名称,类型的名称,或字符串标识符来操作,或者记录。比如,属性的名称的字符串,或者抛出异常标记参数名等。
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使用起来非常的方便,也不容易出错。同时,它需要应对各种各样的符号,然而它在面对这些符号时也表现出协调一致的行为,因此它总是返回局部名称。