首页
学习
活动
专区
工具
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.3K10

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.7K20

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块。.../// /// 检查 /// 参数名称</...,请参见《Via CLR c#》,这里就不做具体介绍。

87050

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

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

1K30

C#6.0 新增功能

还可以在教程部分 C# 6 交互式探索探索这些功能。 01 只读自动属性 只读自动属性提供了更简洁语法来创建不可变类型。...此功能实现用于创建不可变类型真正语言支持且使用更简洁和方便自动属性语法。 02 自动属性初始化表达式 自动属性初始设定项可让你在属性声明声明自动属性初始。...FirstName; 在前面的示例,如果 Person 对象是 null,则将变量 first 赋值 null。 否则,将 FirstName 属性分配给该变量。 最重要是?....早期版本 C# ,可以将集合初始设定项用于序列样式集合,包括键值对周围添加括号而得到 Dictionary: private Dictionary<int, string...早期版本,需要使用 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 性进行检查。 可以可为空引用类型概述中了解该功能更多信息。

84330

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

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

73210

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

要为所有的异常撰写文档,并把它们作为契约一部分 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隐式参数名字。

96360

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

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

1.3K40

C# 8 新增小功能

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

51920

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

71120

欢迎来到 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 ,一些以前不是目标类型表达式变得可以由其上下文推导。

99830

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

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

13010

C#扩展方法解析

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

1.9K70

C# 10 必知五大新功能

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

82520
领券