首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C#属性setter中为ArgumentException分配给'paramName'参数的值?

在C#中,当在属性的setter方法中抛出ArgumentException时,可以为'paramName'参数分配一个值。这个参数表示引发异常的参数名称。为了更好地处理异常和提高代码的可读性,可以为'paramName'参数分配一个有意义的值。

例如,假设我们有一个类Person,其中有一个属性Age,我们希望在setter方法中检查Age的值是否在0到150之间。如果不在这个范围内,我们可以抛出一个ArgumentException并分配一个有意义的参数名称。

代码语言:csharp
复制
public class Person
{
    private int _age;

    public int Age
    {
        get => _age;
        set
        {
            if (value < 0 || value > 150)
            {
                throw new ArgumentException("Age must be between 0 and 150.", nameof(Age));
            }
            _age = value;
        }
    }
}

在这个例子中,我们为ArgumentException的'paramName'参数分配了一个有意义的值,即属性Age的名称。这将帮助其他开发人员更容易地理解异常的来源,并快速定位问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#7.0 新增功能

编写 Deconstruct 方法,用作类的成员。Deconstruct 方法为你要提取的每个属性提供一组 out 参数。...03 弃元 通常,在进行元组解构或使用 out 参数调用方法时,必须定义一个其值无关紧要且你不打算使用的变量。 为处理此情况,C# 增添了对弃元的支持 。...这清楚地表明,该方法在整个方法中通过引用返回。 可以将 ref return 分配给值变量或 ref 变量。 调用方控制是否复制返回值。...C# 7.0 扩展了可作为表达式实现的允许的成员。 在 C# 7.0 中,你可以在属性 和索引器 上实现构造函数 、终结器 以及 get 和 set 访问器。...在以下示例中,如果分配给 Name 属性的字符串为 null,则将 throw 表达式与 null 合并运算符结合使用以引发异常。

1.4K10

C#知多少 | 每个版本都更新了什么?

lastName; } 2get 属性初始化表达式 在属性声明中声明自动属性的初始值, public ICollection Grades { get; } = new List<...", [500] = "The web server can't come out to play today." }; C#7.x 中新增的功能 1out 变量 可以在方法调用的参数列表中声明...仅当左操作数计算为 null 时,才能使用运算符 ??= 将其右操作数的值分配给左操作数。 List numbers = null; int? i = null; numbers ??...调用方可使用属性初始化表达式语法在创建表达式中设置这些值,但构造完成后,这些属性将变为只读。 仅限 init 的资源库提供了一个窗口用来更改状态。...最常见的用法是在字段声明中: private List _observations = new(); 当需要创建新对象作为参数传递给方法时,也可使用目标类型 new

1.8K20
  • C#8.0新增特性

    使用元组模式,可根据表示为元组的多个值进行切换 。...仅当左操作数计算为 null 时,会将其右操作数的值分配给左操作数。 非托管构造类型: 在 C# 7.3 及更低版本中,构造类型(包含至少一个类型参数的类型)不能为非托管类型。...例如,假设泛型 Coords 类型有以下定义: Coords 类型为 C# 8.0 及更高版本中的非托管类型。...与任何非托管类型一样,可以创建指向此类型的变量的指针,或针对此类型的实例在堆栈上分配内存块: 表达式:表达式中的stackal 从C# 8.0开始,如果 stackalloc 表达式的结果为 System.Span...安排当前有效的内插字字符串。在早期的C#版本中,$必须出现在@标记之前。 本节到此结束...

    1.1K40

    关于.NET异常处理的思考

    以上是在实际开发中需要面对的问题,笔者在最近的博文中,也在考虑这个异常到底需要怎么去写,以及异常到底需要怎么去理解,在博文中,也有不少的园友对异常的写法和处理提出了自己的意见,在这里我就写一下自己的一些理解...在.NET中,构造器、获取和设置属性、添加和删除事件、调用操作符重载和调用转换操作符等等都没有办法返回错误代码,但是在这些构造中又需要报告错误,那就必须提供异常处理机制。    ...在异常的处理中,我们可以在一个线程捕获异常,在另一个线程中重新抛出异常。异常抛出时,CLR会在调用栈中向上查找与抛出的异常类型匹配的catch块。.../// /// 检查值 /// paramName">参数名称c#》,这里就不做具体的介绍。

    92050

    荐读|属性与可直接访问的数据成员之间应该如何选

    写在前面 在书写C#代码的时候你是否有过这样的经历:经常混用属性以及公有的数据成员。毕竟他们的用法基本一致,对于使用来说好像没什么区别啊。...属性既可以令调用者通过公有接口访问相关的数据成员 , 又可以确保这些成员得到面向对象式的封装。 注:在C#语言中, 属性这种元素可以像数据成员一样被访问, 但它们其实是通过方法来实现的。...采用隐式写法时,开发者不用自己在属性的getter与setter中编写过多逻辑。...由于C#不允许给索引器起名字,因此同一个类型的索引器必须在参数列表上有所区别,否则就会产生歧义。 另外,索引器必须明确的实现出来,而不能像简单属性那样由系统默认生成。...在日常的开发中虽然用属性的形式来封装变量会占用你一到两分钟的时间,但是如果你一开始没有使用属性,后来想用属性来设计,那么可能就得用好几个小时去修正了。现在多花点时间,将来会省很多功夫。

    1K30

    C#6.0 新增功能

    还可以在教程部分的 C# 6 交互式探索中探索这些功能。 01 只读自动属性 只读自动属性提供了更简洁的语法来创建不可变类型。...此功能实现用于创建不可变类型的真正语言支持且使用更简洁和方便的自动属性语法。 02 自动属性初始化表达式 自动属性初始值设定项可让你在属性声明中声明自动属性的初始值。...FirstName; 在前面的示例中,如果 Person 对象是 null,则将变量 first 赋值为 null。 否则,将 FirstName 属性的值分配给该变量。 最重要的是?....在早期版本的 C# 中,可以将集合初始值设定项用于序列样式集合,包括在键值对周围添加括号而得到 Dictionary: private Dictionary在早期版本中,需要使用 lambda 表达式作为参数: Task.Run(() => DoThings()); C# 6 编译器正确地确定 Task.Run(Func()) 是更好的选择。

    1.7K20

    C#8.0 新增功能

    C# 8.0 扩展了此词汇表,这样就可以在代码中的更多位置使用更多模式表达式。 当数据和功能分离时,请考虑使用这些功能。 当算法依赖于对象运行时类型以外的事实时,请考虑使用模式匹配。...(message: "invalid enum value", paramName: nameof(colorBand)); }; } 属性模式 借助属性模式 ,可以匹配所检查的对象的属性。...Switch 表达式必须要么生成值,要么引发异常。 如果这些情况都不匹配,则 switch 表达式将引发异常。如果没有在 switch 表达式中涵盖所有可能的情况,编译器将生成一个警告。...对于不可为空引用类型,编译器使用流分析来确保在声明时将本地变量初始化为非 Null 值。 字段必须在构造过程中初始化。...不过,编译器使用流分析来确保可为空引用类型的任何变量在被访问或分配给不可为空引用类型之前,都会对其 Null 性进行检查。 可以在可为空引用类型的概述中了解该功能的更多信息。

    88230

    C#4.0新增功能02 命名实参和可选实参

    C# 4 介绍命名实参和可选实参。 通过命名实参,你可以为特定形参指定实参,方法是将实参与该形参的名称关联,而不是与形参在形参列表中的位置关联。 通过可选参数,你可以为某些形参省略实参。...可选参数定义于参数列表的末尾和必需参数之后。 如果调用方为一系列可选形参中的任意一个形参提供了实参,则它必须为前面的所有可选形参提供实参。 实参列表中不支持使用逗号分隔的间隔。...因此,它不是可选的。OptionalStr和OptionalInt都有分配给它们的默认值。它们是可选的。...在 C# 3.0 以及早期版本中,每个形参都需要一个实参,如下例所示。...如果不希望更改形参的默认值,则可以通过使用命名实参和可选实参来为可选形参省略实参。 在下面的调用中,仅为 7 个形参中的其中一个指定了值。

    75910

    框架设计原则和规范(三)

    要为所有的异常撰写文档,并把它们作为契约的一部分 2.1.7. 不要让公有成员根据某个选项来决定是否抛出异常 2.1.8. 不要把异常用作公有成员的返回值或输出参数 2.1.9....不要在异常过滤程序(exception filter)中抛出异常 C#不支持异常过滤程序 2.1.11. 避免显示的从finally代码块中抛出异常。...不要为使用错误而创建新的异常,应该抛出框架中已有的异常 使用异常包括: 传入了null作为参数;ArgumentNullException 参数不合法;ArgumentException 无效的操作;InvalidOperationException...要在抛出ArgumentException异常或其子类时设置ParamName属性,表示哪个参数引发了异常。 2.3.4.3....要在属性的setter中,以“value”作为value隐式参数的名字。

    99960

    EF Core中避免贫血模型的三种行之有效的方法

    删除公共属性中的set方法 上面介绍的参数化构造函数确保在实例化时对象处于有效状态。尽管如此,这并没有阻止您将属性值更改为无效值。...通常DDD概念中可以简化代码的是我们将在下面讨论的值对象的使用。 3.3.引入值对象 值对象是不可变的(实例化后不允许更改)没有身份标识的对象。值对象通常可以用来代替领域对象中的一个或多个属性。...在(RDBMS)数据持久性的上下文中,值类型不存在于单独的数据库表中。为了让我们在实体框架中使用值对象,需要一个小的改动。这取决于您使用的EF版本。...在EF6中,我们只需用[ComplexType]属性修饰值对象: [ComplexType] public class Money { ... } 在EF Core中,从版本2开始,我们可以使用...5.关于单元测试的说明 一个丰富的、自我验证的领域模型的一个负面影响是它可以使测试变得更加困难。通过public setter,您可以简单地将各个值分配给任何领域对象的属性。

    1.4K40

    C# 8 新增小功能

    过时的属性 与 Visual Basic 不同,C# 无法把单个 getter 和 setter 标记为过时。...4 月,该特性从 C# 9 迁移到了 C# 8 上。 结构上的只读成员 当分配给只读字段或用作 in 参数时,结构上的方法有个性能小问题。如果我们调用结构上的方法,编译器首先会生成防御性副本。...尽管这通常不足以产生问题,但是,在用于紧密循环(tight loop)时,细微的低效的确会累积出性能问题。 对于完全不可变的结构,可以标记整个结构为只读,这样可以避免此类情况的发生。...这和Pure 属性不同,只要只读方法不修改结构本身的值,那么就有明显的副作用。 自动实现属性的 getter 将被自动认为是只读的。在某些情况下,setter 也可以被标记为只读。...比如,当属性值存于字典中而不是直接存入结构本身的时候。 在目前的提议下,引用类型(类和接口)将不会受到该特性的支持。

    53820

    vue数据双向绑定原理-observer

    假如写过 C# winform 自定义控件的, 我想更好理解之后的逻辑和实现原理 在 C# 中 当控件的某个属性发生了变化, 就刷新视图 priveate int a ; public int A...enumerable 当且仅当该属性的 enumerable 为 true 时,该属性才能够出现在对象的枚举属性中。默认为 false 。...writable 当且仅当该属性的 writable 为 true 时,该属性才能被赋值运算符改变。默认为 false 。...set 一个给属性提供 setter 的方法,如果没有 setter 则为 undefined 。该方法将接受唯一参数,并将该参数的新值分配给该属性。默认为 undefined 。...: 实现 Observer 将需要 observe 的数据对象进行递归遍历,包括子属性对象的属性,都加上 setter 和 getter 这样的话,给这个对象的某个值赋值,就会触发 setter

    74820

    C#主构造函数

    在C#编程语言中,构造函数是类的特殊成员,用于初始化新创建的对象。主构造函数是类中的主要构造函数,它负责执行所有必要的初始化工作。...主构造函数的定义 在C#中,主构造函数是类中的第一个构造函数,它通常不接受任何参数或者接受所有必要的参数来初始化对象。主构造函数的名称必须与类名相同,并且没有返回类型。...主构造函数的重要性 初始化:主构造函数确保对象在创建时处于一致的状态。它初始化对象的属性,设置初始值,并执行必要的设置。 可读性:通过使用主构造函数,代码的可读性得到提高。...参数化:主构造函数应该接受所有必要的参数来初始化对象。这有助于避免在对象创建后对其进行修改。 不可变性:如果可能,对象的状态应该在构造后不可变。这可以通过在构造函数中设置所有属性的最终值来实现。...同时,它还包含了对参数的验证,确保传入的值是有效的。 主构造函数与辅助构造函数 在某些情况下,除了主构造函数外,类可能还需要辅助构造函数。

    2.2K00

    欢迎来到 C# 9.0(Welcome to C# 9.0)

    (即可写的),对象初始化器才能工作:它们首先调用对象的构造函数(本例中是默认的无参数构造函数),然后赋值给属性 setter。...但是如果记录改变了状态,它的 Equals 值也会随之改变,我们可能再也找不到它了!在哈希表实现中,它甚至可能破坏数据结构,因为位置是基于它的哈希码得到的。...同样,C# 会自动为您处理这个问题。实现的方式是,记录有一个名为 EqualityContract 的“虚的(virtual)”受保护的属性。...在 C# 9.0 中,您可以选择在顶级编写你的主程序(main program): using System; Console.WriteLine("Hello World!"); 允许任何语句。...例如,null 和 lambda表达式始终是目标类型的。 在 C# 9.0 中,一些以前不是目标类型的表达式变得可以由其上下文推导。

    1K30

    C#的扩展方法解析

    在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”特性,在设计模式的一些基本原则中也有较多的提到。    ...1.扩展方法的基本原则:       (1).C#只支持扩展方法,不支持扩展属性、扩展事件、扩展操作符等。      ...(3).C#编译器查找静态类中的扩展方法时,要求这些静态类本身必须具有文件作用域。       (4).C#编译要求“导入”扩展方法。...C#一旦使用this关键字标记了某个静态方法的第一个参数,编译器就会在内部向该方法应用一个定制的attribute,这个attribute会在最终生成的文件的元数据中持久性的存储下来,此属性在System.Core...三..NET3.5的扩展方法Enumerable和Queryable:    在框架中,扩展方法最大的用途就是为LINQ服务,框架提供了辅助的扩展方法,位于System.Linq命名空间下的Enumerable

    2K70

    基础:C# try catch finally异常处理(Exception)

    C# 中try块可以捕获测试代码块中的错误。catch块可以处理错误。finally块无论是否try和catch块出现异常都可以执行代码。...C# 中提供了许多异常类型: 异常类 描述 SystemException 其他用户可处理的异常的基本类 ArgumentException 方法的参数是非法的 ArgumentNullException...InvalidOperationException 当对方法的调用对对象的当前状态无效时,由某些方法引发。 ArgumentException 所有参数异常的基类。...ArgumentNullException 在参数为空(不允许)的情况下,由方法引发。 ArgumentOutOfRangeException 当参数不在一个给定范围之内时,由方法引发。...InteropException 目标在或发生在CLR外面环境中的异常的基类。 ComException 包含COM类的HRESULT信息的异常。

    17610

    C# 10 必知的五大新功能

    或者,你也可以关注 C# 团队展示的他们最喜欢的功能。在最近的微软Build 大会上,C# 的首席设计师 Mads Torgersen 透漏了一些目前正在进行的工作。...空参数检查 本着减少样板代码的精神,C# 提供了一个非常好的新功能:空参数检查。你肯定编写过需要检查空值的方法。...你可以像以前一样,添加一个构造函数,但如此一来就需要添加更多的样板代码了。此外,将值从一个参数复制到属性也是另一个很容易理解但很常见的错误。...当无法使用自动实现的属性时,你就必须添加支持字段到类,并编写正常的属性方法,就像回到 C# 2一样。但是 C# 10中提供了一个关键字field,可以自动创建支持字段。...总结 当然,C# 10中的新功能肯定不止这个五个。还有一些表达式方面的变化,以及一个有争议的变动:在接口中定义静态成员。我们只有耐心等待了。

    87420
    领券