首页 > 编程语言 >C# 中 nameof 关键字的用法详解

C# 中 nameof 关键字的用法详解

时间:2025-01-03 18:11:41浏览次数:1  
标签:UserName nameof string C# 关键字 详解 public 属性

原文链接:https://blog.csdn.net/sD7O95O/article/details/138060338

在 C# 6.0 中,Microsoft 引入了一个新的关键字 nameofnameof 关键字用于获取变量、类型或成员的名称,其返回的是一个字符串。这一功能在编程时非常有用,特别是当我们需要引用某个变量或成员的名称时,而不仅仅是值。下面我们将详细探讨 nameof 的用法,并通过示例代码来加深理解。

1. 基本用法

nameof 可以用于获取类名、方法名、属性名、变量名等。这是一个编译时的操作,所以不会影响运行时的性能。

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine(nameof(Program)); // 输出 "Program"
        Console.WriteLine(nameof(Main));  // 输出 "Main"
    }
}

2. 在异常处理和日志记录中的使用

nameof 在异常处理和日志记录中特别有用,因为它可以帮助我们清晰地指出是哪个变量或方法出了问题。

public class UserService
{
    private string _userName;

    public string UserName
    {
        get { return _userName; }
        set
        {
            if (string.IsNullOrEmpty(value))
            {
                throw new ArgumentException("UserName cannot be null or empty.", nameof(UserName));
            }
            _userName = value;
        }
    }
}

在这个例子中,如果 UserName 属性被设置为空或 null,程序会抛出一个 ArgumentException,并明确指出是哪个属性引起了问题。

3. 在数据绑定和模型验证中的使用

在数据绑定和模型验证时,nameof 也可以派上用场。例如,在使用 MVC 或其他数据绑定框架时,你可能需要指定与某个属性关联的验证消息。

public class UserModel
{
    [Required(ErrorMessage = "The " + nameof(UserName) + " field is required.")]
    public string UserName { get; set; }
}

在这个例子中,nameof(UserName) 会被替换为 "UserName",从而生成一条清晰的验证消息。

4. 在测试中的使用

在编写单元测试时,nameof 可以帮助你清晰地指出正在测试哪个方法或属性。

[TestMethod]
public void TestUserNameProperty()
{
    var service = new UserService();
    Assert.ThrowsException<ArgumentException>(() => service.UserName = "", "Setting UserName to empty string should throw ArgumentException.");
    // 在这里,我们可以使用 nameof 来清晰地指出我们正在测试 UserName 属性。
}

5. 结论

nameof 是一个强大的工具,它可以帮助我们编写更清晰、更易于维护的代码。通过使用 nameof,我们可以避免硬编码名称,并使得代码在重构时更加健壮。此外,nameof 还可以提高代码的可读性和可维护性,因为它允许我们直接引用变量、方法或属性的名称,而不是使用可能容易出错的字符串。

标签:UserName,nameof,string,C#,关键字,详解,public,属性
From: https://www.cnblogs.com/Dongmy/p/18650685

相关文章

  • 极市平台 | 行人、车辆、动物等ReID最新综述!武大等全面总结Transformer方法 | IJCV 20
    本文来源公众号“极市平台”,仅用于学术分享,侵权删,干货满满。原文链接:行人、车辆、动物等ReID最新综述!武大等全面总结Transformer方法|IJCV20242024的最后一篇文章!提前祝大家跨年快乐!2024好好再见2025笑笑迎接来自乐队“五月天MAYDAY”!极市导读研究人员对基于Transfor......
  • 外贸人必看!如何通过Facebook快速找到精准客户?
    随着全球化进程的加速,Facebook已经成为外贸企业开拓国际市场的重要阵地。但面对平台上海量的用户和内容,如何高效找到精准客户成了不少外贸人的难题。今天,我们就来分享一套通过Facebook快速找到精准客户的实用方法,干货满满,不容错过!1.找到相关主题的高价值帖子在Facebook上,寻......
  • windows C#-索引器
    索引器允许类或结构的实例就像数组一样进行索引。无需显式指定类型或实例成员,即可设置或检索索引值。索引器类似于属性,不同之处在于它们的访问器需要使用参数。以下示例定义了一个泛型类,其中包含用于赋值和检索值的简单get和set访问器方法。Program类创建了此类的一个......
  • windows C#-确定字符串是否表示数值
    若要确定字符串是否是指定数值类型的有效表示形式,请使用由所有基元数值类型以及如DateTime和IPAddress等类型实现的静态TryParse方法。以下示例演示如何确定“108”是否为有效的int。inti=0;strings="108";boolresult=int.TryParse(s,outi);//inow=......
  • 基于N-HiTS神经层次插值模型的时间序列预测——cross validation交叉验证与ray tune超
    论文链接:https://arxiv.org/pdf/2201.12886v3N-......
  • LangChain总结阶段一
    了解Prompttemplate,和大模型交互就靠它了提示板(PromptTemplate)是与大型语言模型(LLMs)交互时用来生成结构化提示的工具。它使用Python的str.format方法来构建带有占位符的模板字符串,允许开发者插入特定主题或其他变量以生成定制化的提示。这种方式简化了与LLMs的对话,使得生......
  • Linux(Centos 7.6)命令详解:ls
    1.命令作用列出目录内容(listdirectorycontents)2.命令语法Usage:ls[OPTION]...[FILE]...3.参数详解OPTION:-l,longlist使用长列表格式-a,all不忽略.开头的条目(打印所有条目,包括.开头的隐藏条目)-t,modificationtime按修改时间排序,最新的优先-r,reverseorderwhile......
  • nacos 报错排查
    报错内容 org.springframework.beans.factory.UnsatisfiedDependencyException:Errorcreatingbeanwithname'memoryMonitor'definedinURL[jar:file:/home/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-config-2.2.3.jar!/com/alibaba/nacos/config/se......
  • toad.selection.select函数
    toad.selection.select函数概述toad.selection.select是toad库中用于自动特征选择的一个重要函数。它根据指定的阈值条件,筛选出符合要求的特征,同时可以根据特征间的相关性进一步剔除冗余特征。这个函数特别适用于信用评分卡建模和其他金融风控场景,帮助快速清洗和优化特......
  • 数据集—OpenScene
    OccupancyNetwork3D框检测与固定输出尺寸联系起来-目标中心体素-网格中心体素(Voxel)-三维像素二维的叫像素体积像素,‌即空间中的小块体积元素2018年在论文「OccupancyNetworks:Learning3DReconstructioninFunctionSpace」 把世界划分为一系列网格单......