最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中nameof用法和應(yīng)用場景實現(xiàn)

 更新時間:2025年11月27日 09:17:23   作者:lfw2019  
在 C# 中,nameof是一個上下文關(guān)鍵字,用于在編譯時獲取,并以字符串形式返回,下面就來具體介紹一下如何使用,感興趣的可以了解一下

在 C# 中,nameof 是一個上下文關(guān)鍵字(contextual keyword),用于在編譯時獲取 變量、類型或成員的名稱,并以字符串形式返回。它的主要作用是避免硬編碼字符串,提高代碼的可維護性和健壯性,尤其是在需要引用標識符名稱的場景中(如異常處理、日志記錄、數(shù)據(jù)綁定等)。

基本用法

nameof 可以用于以下場景:

  1. 獲取變量名

    string myVariable = "Hello";
    string variableName = nameof(myVariable); // 返回 "myVariable"
  2. 獲取屬性名

    public class MyClass 
    {
        public string MyProperty { get; set; }
    }
    
    MyClass obj = new MyClass();
    string propertyName = nameof(obj.MyProperty); // 返回 "MyProperty"
  3. 獲取類型名

    string typeName = nameof(MyClass); // 返回 "MyClass"
  4. 獲取方法名

    public void MyMethod() 
    {
        string methodName = nameof(MyMethod); // 返回 "MyMethod"
    }
  5. 獲取命名空間或泛型類型的部分名稱

    Console.WriteLine(nameof(System.Collections.Generic)); // 輸出 "Generic"
    Console.WriteLine(nameof(List<int>)); // 輸出 "List"
    Console.WriteLine(nameof(List<int>.Count)); // 輸出 "Count"

典型應(yīng)用場景

1.異常處理

在參數(shù)校驗時,使用 nameof 可以明確指出問題所在的參數(shù)或?qū)傩裕?/p>

public string UserName 
{
    get => _userName;
    set 
    {
        if (string.IsNullOrEmpty(value))
        {
            throw new ArgumentException("Name cannot be null or empty.", nameof(UserName));
        }
        _userName = value;
    }
}
  • 如果 UserName 被設(shè)置為空,拋出的異常會明確顯示 "UserName" 作為參數(shù)名。

2.日志記錄

在日志中記錄代碼元素的名稱,避免硬編碼字符串:

Console.WriteLine($"Initializing {nameof(Color)} enum"); // 輸出 "Initializing Color"

3.數(shù)據(jù)綁定與模型驗證

在 MVC 或數(shù)據(jù)綁定框架中,結(jié)合 nameof 生成驗證消息:

public class UserModel 
{
    [Required(ErrorMessage = $"The {nameof(UserName)} field is required.")]
    public string UserName { get; set; }
}
  • 如果 UserName 被重命名,nameof 會自動更新,避免字符串錯誤。

4.單元測試

在測試中明確標識測試的目標方法或?qū)傩裕?/p>

[TestMethod]
public void TestUserNameProperty() 
{
    var service = new UserService();
    Assert.ThrowsException<ArgumentException>(() => service.UserName = "", 
        $"Setting {nameof(UserService.UserName)} to empty should throw.");
}

與ToString()的區(qū)別

特性nameofToString()
執(zhí)行時機編譯時(生成字符串常量)運行時(調(diào)用方法)
返回內(nèi)容標識符的名稱(如變量、屬性名)對象的字符串表示(如值或自定義格式)
示例nameof(myVariable) → "myVariable"myVariable.ToString() → "Hello"

枚舉的對比

enum Color { Red, Green, Blue }
Color myColor = Color.Green;

string a = nameof(myColor);      // 返回 "myColor"(變量名)
string b = nameof(Color.Blue);   // 返回 "Blue"(枚舉成員名)
string c = myColor.ToString();   // 返回 "Green"(枚舉值的名稱)

注意事項

編譯時操作
nameof 在編譯時求值,因此不會引入運行時開銷。

不支持局部變量
不能用于局部變量(如方法內(nèi)部定義的變量):

void MyMethod() 
{
    int x = 10;
    string name = nameof(x); // ? 錯誤:x 是局部變量
}

忽略 @ 符號
如果標識符以 @ 開頭(如 @class),@ 會被忽略:

var @new = 5;
Console.WriteLine(nameof(@new)); // 輸出 "new"

泛型類型的限制
nameof(T) 返回的是泛型參數(shù)名(如 "T"),而非實際類型名。若需要實際類型名,需結(jié)合反射:

public void GenericMethod<T>() 
{
    string typeName = nameof(T); // 返回 "T"
    // 使用反射獲取實際類型名:
    Type actualType = typeof(T);
    string actualTypeName = actualType.Name; // 如 "String"
}

C# 11 的新特性

C# 11 開始,nameof 可用于 方法參數(shù)屬性

[ParameterString(nameof(msg))]
public static void Method(string msg) 
{
    [ParameterString(nameof(T))]
    void LocalFunction<T>(T param) { }

    var lambda = ([ParameterString(nameof(aNumber))] int aNumber) => aNumber.ToString();
}

總結(jié)

nameof 是 C# 中非常實用的工具,尤其在需要引用標識符名稱的場景中(如異常處理、日志記錄、數(shù)據(jù)綁定)。它的核心優(yōu)勢包括:

  • 避免硬編碼字符串,減少錯誤。
  • 編譯時檢查,確保代碼健壯性。
  • 提高可讀性和可維護性,特別是在重構(gòu)時自動更新名稱。

通過合理使用 nameof,可以編寫出更清晰、更可靠的代碼。

到此這篇關(guān)于C#中nameof用法和應(yīng)用場景實現(xiàn)的文章就介紹到這了,更多相關(guān)C# nameof用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#程序員應(yīng)該養(yǎng)成的程序性能優(yōu)化寫法

    C#程序員應(yīng)該養(yǎng)成的程序性能優(yōu)化寫法

    工作和生活中經(jīng)??梢钥吹揭恍┏绦蛟?寫代碼的時候只關(guān)注代碼的邏輯性,而不考慮運行效率,其實這對大多數(shù)程序猿來說都是沒有問題的,不過作為一只有理想的CodeMonkey,我還是希望給大家分享一些性能優(yōu)化心得
    2017-08-08
  • Unity Shader實現(xiàn)2D游戲迷霧

    Unity Shader實現(xiàn)2D游戲迷霧

    這篇文章主要為大家詳細介紹了Unity Shader實現(xiàn)2D游戲迷霧,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#實現(xiàn)的ZPL條碼打印類完整實例

    C#實現(xiàn)的ZPL條碼打印類完整實例

    這篇文章主要介紹了C#實現(xiàn)的ZPL條碼打印類,結(jié)合實例形式詳細分析了C#實現(xiàn)條碼打印的原理與使用方法,代碼注釋中備有詳盡的說明,便于理解使用,需要的朋友可以參考下
    2016-06-06
  • Unity?百度AI實現(xiàn)Logo商標識別

    Unity?百度AI實現(xiàn)Logo商標識別

    本文主要介紹了Unity實現(xiàn)檢測和識別圖片中的品牌LOGO信息。即對于輸入的一張圖片(可正常解碼,且長寬比適宜),輸出圖片中LOGO的名稱、位置和置信度。需要的可以參考一下
    2022-01-01
  • C#圖片處理類分享

    C#圖片處理類分享

    這篇文章主要為大家分享了C#圖片處理類的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • unity實現(xiàn)車方向盤轉(zhuǎn)動效果

    unity實現(xiàn)車方向盤轉(zhuǎn)動效果

    這篇文章主要為大家詳細介紹了unity實現(xiàn)車方向盤轉(zhuǎn)動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#調(diào)用OpenCV開發(fā)簡易版美圖工具【推薦】

    C#調(diào)用OpenCV開發(fā)簡易版美圖工具【推薦】

    本文主要介紹在WPF項目中使用OpenCVSharp3-AnyCPU開源類庫處理圖片,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-10-10
  • C# 中的動態(tài)創(chuàng)建組件(屬性及事件)的實現(xiàn)思路及方法

    C# 中的動態(tài)創(chuàng)建組件(屬性及事件)的實現(xiàn)思路及方法

    這篇文章主要介紹了C# 中的動態(tài)創(chuàng)建組件,有需要的朋友可以參考一下
    2013-12-12
  • C#中使用YOLO的常用方式的詳細指南

    C#中使用YOLO的常用方式的詳細指南

    在C#中使用YOLO(You Only Look Once)目標檢測算法,通常有幾種不同的實現(xiàn)方式,例如OpenCV,ONNX Runtime等,下面我們來看看具體的操作方法吧
    2025-05-05
  • WPF簡單的數(shù)據(jù)庫查詢實例

    WPF簡單的數(shù)據(jù)庫查詢實例

    下面小編就為大家分享一篇WPF簡單的數(shù)據(jù)庫查詢實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11

最新評論

潜山县| 利辛县| 福建省| 兴安县| 桐柏县| 唐河县| 东平县| 恩平市| 湖北省| 龙岩市| 区。| 柳州市| 道孚县| 兰西县| 高雄县| 渑池县| 积石山| 朔州市| 永丰县| 弥勒县| 如皋市| 大冶市| 乌苏市| 安乡县| 宝鸡市| 泊头市| 陈巴尔虎旗| 营山县| 盐池县| 龙陵县| 皮山县| 九寨沟县| 安溪县| 句容市| 松江区| 岚皋县| 宝鸡市| 砚山县| 芜湖县| 婺源县| 仙居县|