很多時候,我們喜歡用數據的名稱,類型的名稱,或字符串標識符來操作,或者記錄。比如,屬性的名稱的字符串,或者拋出異常標記參數名等。
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使用起來非常的方便,也不容易出錯。同時,它需要應對各種各樣的符號,然而它在面對這些符號時也表現出協調一致的行為,因此它總是返回局部名稱。