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

C#验证:没有硬编码的属性名字符串的IDataErrorInfo?

在C#中,IDataErrorInfo接口用于提供数据验证和错误信息的机制。通常情况下,我们会在实现该接口的类中硬编码属性名字符串来进行数据验证。然而,有时候硬编码属性名字符串可能会导致代码的脆弱性和可维护性下降。为了解决这个问题,可以使用反射和表达式树来实现没有硬编码属性名字符串的IDataErrorInfo验证。

具体实现步骤如下:

  1. 创建一个实现了IDataErrorInfo接口的类,该类包含需要进行验证的属性。
代码语言:csharp
复制
public class MyData : IDataErrorInfo
{
    public string Name { get; set; }
    public int Age { get; set; }

    public string this[string columnName]
    {
        get
        {
            return GetValidationError(columnName);
        }
    }

    public string Error { get { return null; } }

    private string GetValidationError(string propertyName)
    {
        string error = null;

        switch (propertyName)
        {
            case nameof(Name):
                if (string.IsNullOrEmpty(Name))
                    error = "Name不能为空";
                break;

            case nameof(Age):
                if (Age < 0 || Age > 100)
                    error = "Age必须在0到100之间";
                break;
        }

        return error;
    }
}
  1. 在GetValidationError方法中,使用switch语句根据属性名进行验证,并返回相应的错误信息。
  2. 在需要进行数据验证的地方,创建MyData类的实例,并通过属性名字符串来获取错误信息。
代码语言:csharp
复制
MyData data = new MyData();
data.Name = "John";
data.Age = 150;

string nameError = data[nameof(MyData.Name)]; // 获取Name属性的错误信息
string ageError = data[nameof(MyData.Age)]; // 获取Age属性的错误信息

这样,我们就实现了没有硬编码属性名字符串的IDataErrorInfo验证。

对于C#验证中没有硬编码属性名字符串的IDataErrorInfo,腾讯云并没有提供特定的产品或服务。然而,腾讯云提供了一系列云计算相关的产品和服务,如云服务器、云数据库、人工智能等,可以帮助开发者构建和部署各种应用。您可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多信息。

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

相关·内容

  • FluentValidation在C# WPF中应用

    复杂属性:我遇到问题是,怎么验证ViewModel中对象属性属性?...和子属性都实现IDataErrorInfo接口,即可实现复杂属性验证,文章中没有具体实现,但灵感是从这来,就不具体说该链接代码了,有兴趣可以点击链接阅读,下面贴上代码。...普通类 - Student 此类用作ViewModel中对象属性使用,学生类包含3个属性:名字、年龄、邮政编码。...,FluentValidation调用就在这里,校验逻辑封装在StudentValidator,表单输入时会实时调用该处代码,columnName表示表单项列名,就是ViewModel绑定属性。...(见Age)、字符串不能为空和长度限制(见Name)、字符串正则表达式验证(见Zip)。

    17110

    WPF 表单验证之 INotifyDataErrorlnfo 接口使用示例

    二、参考 主要参考《WPF 编程宝典》一书 19.4.1 一节: 之前在网上找资料,大多是提到了基于异常验证(ExceptionValidationRule)和另一种数据错误验证 IDataErrorInfo...其中,错误列表是个字典,键为属性,值为该属性错误信息字符串列表。而两个方法主要是对错误列表进行相应操作,并且触发变动事件。...另外还重载了一个 GetErrors 方法,也是针对于同时处理几个属性场景,并且之前返回类型为 List,相当于只是把错误列表 key 去掉了,并没有整合,而我这个方法返回值为 List...(属性传空则获取所有错误列表) /// /// 属性 ...: 另外,之前这两个操作数是 int 类型,如果保持的话,当删除内容,红框还是会出现,但是 set 块没被执行,也就达不到验证效果,没有找到解决方法,知道朋友可以告知一下。

    91810

    【愚公系列】2023年11月 WPF控件专题 Validation控件详解

    自定义控件则允许开发人员使用XAML和C#等编程语言来创建个性化用户界面元素。自定义控件可以根据需求提供更多功能和自定义化选项,以及更好用户体验。...IDataErrorInfo:这是一个接口,通过实现它,可以使绑定元素支持数据验证。...1.属性介绍WPF中Validation控件属性包括:ValidationRule:用于指定要应用验证规则。可以使用内置验证规则,也可以创建自定义验证规则。...ValidatesOnDataErrors:指示在数据对象实现了IDataErrorInfo接口时是否要进行验证。如果设置为true,则在数据对象中实现中指定验证逻辑将自动应用。...接下来,在ViewModel中定义这些属性验证规则:public class RegisterViewModel : INotifyPropertyChanged, IDataErrorInfo{

    41112

    ASP.NET MVC下四种验证编程方式

    Action方法中,并在没有通过验证情况下将错误信息响应给客户端。...对象3个属性进行逐条验证,如果提供数据没有通过验证,我们会调用当前ModelStateAddModelError方法将指定验证错误消息转换为ModelError保存起来。...我们采用具体验证规则如下。 Person对象Name、Gender和Age属性均为必需字段,不能为Null(或者空字符串)。...如果数据成员没有通过验证,我们通过一个ValidationResult对象封装错误消息和数据成员名称(属性),该方法最终返回是一个元素类型为ValidationResult集合。...如下面的代码片段所示,IDataErrorInfo具有两个成员,只读属性Error用于获取基于自身错误消息,而只读索引用于返回指定数据成员错误消息。

    1.4K80

    ASP.NET MVC以ModelValidator为核心Model验证体系: ModelValidator

    具体在Model绑定过程中,ModelBinder通过ValueProvider为Model对象某个属性提供相应属性值之后,会根据定义在基于该属性Model元数据验证规则实施验证。...一般来说,当它们用于验证某个复杂类型对象时候,针对于类型本身验证返回ModelValidationResult对象MemberName属性为空字符串;而对于针对属性验证来说,属性名称直接作为MemberName...如下面的代码片断所示,这两个ClientModelValidator用于表示验证数据类型字符串分别是“number”和“date”。而表示错误消息字符串是从内部维护资源文件中获取。...如下面的代码片断所示,IDataErrorInfo具有两个成员,只读属性Error用于获取基于自身错误消息,而只读索引用于返回指定数据成员错误消息。...this[string columnName] { get; } 5: } ASP.NET MVCModel验证系统为实现了IDataErrorInfo接口数据对象验证定义专门

    1.5K10

    ASP.NET MVC下四种验证编程方式

    一般来说,如果ModelValidationResult对象来源于针对容器对象本身验证,它MemberName属性为空字符串。...对于针对容器对象某个属性验证来说,属性名称会作为返回ModelValidationResult对象MemberName属性。...四、DataErrorInfoModelValidator 如果我们让数据类型实现IDataErrorInfo接口,可以利用实现Error属性和索引提供针对自身以及所属数据成员验证错误信息。...后者则专门验证容器对象某个属性,它在实现Validate方法中会利用属性从实现索引中提取相应错误消息并将其转换成返回ModelValidationResult对象。...如果被验证是容器类型某个属性值并且容器类型实现了IDataErrorInfo接口,它会创建一个DataErrorInfoPropertyModelValidator对象并添加到返回ModelValidator

    98280

    WPF --- TextBox输入校验

    ValidationRule ValidationRule 是一个抽象类,提供了抽象方法 Validate(), 它是WPF中用于数据验证一种机制,它可以在用户输入数据之前或之后执行自定义验证逻辑。...可以轻松地实现对数据格式、范围、逻辑等方面的验证,并在验证失败时提供相应反馈信息。 「ValidationRule主要作用域在前端页面上」。...IDataErrorInfo IDataErrorInfo 是一个接口,Viewmodel 实现接口用于在后台,提供数据验证和错误信息。...小结 以上两种数据校验(IDataErrorInfo、ValidationRule)方式,均可以实现自定义数据校验,例如对数据格式、范围、逻辑等方面的验证,并在验证失败时提供相应反馈信息。...IDataErrorInfo适用于在ViewModel做数据校验,可以做一些无法在前端页面做事情,比如出现异常值是还原为默认值。

    44120

    WPF --- TextBox输入校验

    引言在WPF应用程序开发中,数据校验是确保用户输入数据正确性和完整性重要一环。...-- more -->ValidationRuleValidationRule 是一个抽象类,提供了抽象方法 Validate(), 它是WPF中用于数据验证一种机制,它可以在用户输入数据之前或之后执行自定义验证逻辑...可以轻松地实现对数据格式、范围、逻辑等方面的验证,并在验证失败时提供相应反馈信息。ValidationRule主要作用域在前端页面上。...IDataErrorInfo 主要作用域为后台 ViewModel该接口包含两个成员:Error 和 this[string columnName]。这两个成员允许你在数据绑定时提供验证错误信息。...图片小结以上两种数据校验(IDataErrorInfo、ValidationRule)方式,均可以实现自定义数据校验,例如对数据格式、范围、逻辑等方面的验证,并在验证失败时提供相应反馈信息。

    67760

    C# API中模型和它们接口设计

    .NET提供了一些开箱即用验证接口,不过每个人都有自己特定需求。 IDataErrorInfo IDataErrorInfo接口早就可以用了,不过现在基本被弃用,因为它用起来很麻烦。...正如你所看到,Error属性事情太多了,它将所有东西都拼凑成一个字符串,从而无法区分对象级别和属性级别的验证错误。...不过,你也可以传给它一个null或空字符串来获取对象级验证错误。...它返回是IEnumerable而不是IEnumerable,这让它看起来就像是一个C# 1接口,而不是泛型。...不管指定属性是有效还是无效,都应该触发ErrorsChanged事件。如果对象级验证已经发生变化,则应使用null或字符串触发ErrorsChanged事件。

    1.6K20

    C#学习笔记 反射

    Type对象包含C#对象各种信息,例如名称,命名空间名称等等。使用typeof 运算符,可以从一个类获取Type对象。...MemberInfo对象 通过MemberInfo对象可以查看有关类中成员信息。其中有大量方法和属性,详情可以参阅MSDN。 MemberInfoToString()方法返回成员信息字符串。...初看之下貌似没有什么作用,因为利用反射可以做到事情不用反射照样也可以做到。其实,反射最重要作用就在于这动态 二字。...如果不利用反射,想要编写代码组合类的话,就必须编码到代码里面,这在某些情况下就不适用了。...比如在编写Web程序过程中,有很多工作都是相同,如果每次都编码的话,不仅效率不高,而且很多情况下也容易犯错。这时候利用反射特性,将不变工作固定下来,变动工作分离出来,可以大大提高工作效率。

    36020

    ASP.NET MVC5中Model验证

    后台验证 DataAnnotation ValidationAttribute IValidatableObject IDataErrorInfo 前端验证 后台验证 DataAnnotation...注意,Age属性上并未标注RequiredAttribute,却依然提示Age字段必须,这是因为Age是int类型,int类型不能为null,对于不能为null类型,ASP.NET MVC默认为是必须...IDataErrorInfo 实现IDataErrorInfo接口也可以进行数据验证,示例代码如下: public class Person : IDataErrorInfo { [Display...前端验证 上述验证均是在服务器端进行,除此之外我们也可以使用js在客户端进行数据验证。...引用文件之后,运行程序,然后查看页面源代码,可以看到form中input标签中多出了 data-val 属性以及其它和数据注解相关属性。 对于验证失败信息,我们需要对用户进行相应提醒。

    1.5K20

    ASP.NET MVC以ModelValidator为核心Model验证体系: ModelValidatorProvider

    Model验证可以看成是Model绑定后续环节,它对绑定数据实施验证,所以Model验证也是一个递归过程,它采用基于属性验证规则对绑定属性值实施验证。...方法中,如果当前Model元数据是基于某个属性(表示容器类型ContainerType不会Null并且具有属性名称),在调用GetTypeDescriptor方法获取容器类型描述对象,进而根据属性类型得到用于描述属性...对于基于属性Model元数据来说,如果其容器类型实现了IDataErrorInfo接口,该方法返回ModelValidtor集合中还会包含一个基于指定Model元数据和Controller上下文创建...在通过Visual StudioASP.NET MVC项目模板创建空Web应用中我们定义了如下一个实现了IDataErrorInfo接口Contact类型。...前者对Contact对象本身实施验证,并将Error属性作为验证结果错误消息;后者针对应属性实施验证验证结果错误消息来源于将属性名称作为索引值。

    1.4K10

    【深入浅出C#】章节 2:数据类型和变量:变量和常量声明和初始化

    变量声明语法如下: ; 其中, 表示变量数据类型,如整数类型 int、字符串类型 string、布尔类型 bool 等。...常量在程序中作用是提供一种不可变数据存储方式,可以减少编码使用,增加代码可读性和可维护性。常量通常用于存储不会变化值,如数学常数、配置信息、枚举类型等。...使用常量好处是: 提供了一种不可变数据存储方式,避免了编码使用。 增加了代码可读性和可维护性。 在整个程序中使用相同值,确保了数值一致性和准确性。...对于常量: 使用常量替代编码字面量:将常用、不会变化值定义为常量,以提高代码可维护性和可读性。...通过声明常量,我们可以避免在代码中使用编码字面量,提高代码可读性和可维护性。同时,我们也讨论了只读变量概念和用法,以在运行时确定常量值或对象实例化时初始化。

    53820

    第1天--文本与变量

    零、今日目标 我们在开发程序时候都会处理大量数据,这些数据有些是编码(直接写在程序中),有些是通过输入(输入可能来自键盘、互联网等)得到。...1. string string 读作 [strɪŋ] ,在 c# 中我们使用它存储字符串,例如 “你好,世界!”,“Hello World!”,“こんにちは せかい!”...等这些都是字符串,我们发现这三个字符串我都使用了 " ,这是因为在 C# 规定 string 类型数据必须使用 " 包住。...上一小节我们所编写代码都是编码,但是在实际开发中使用编码情况少之又少,因此我们就需要用到变量这一结构。...变量不符合规范 B. age 存储一定是 int 类型 C.

    70200

    .NET周刊【6月第5期 2024-06-30】

    通过修改消息对话框中内容区域替换为HtmlTextBlock,并绑定Html内容属性,实现了目标功能。文章还提供了关键代码示例,修正了在跳转链接时问题。....NET下 支持大小写不敏感JSON Schema验证方法 https://www.cnblogs.com/dotnet-diagnostic/p/18261226 本文讨论了在JSON数据验证中应对属性大小写敏感问题两种解决方案...文中详细讲解了如何配置和使用该选项来实现属性大小写无关JSON Schema验证。...在WPF中实现业务层验证可使用IDataErrorInfo接口,提供自定义错误信息。通过在类中实现此接口,可在用户界面显示详细错误信息,帮助用户纠正输入错误。...如何使用浏览器内置表单验证而不是默认客户端输入验证

    14010

    新160个CrackMe分析-第1组:1-10(上)

    002-abexcm5爆破难度:⭐算法难度:⭐信息收集运行情况:输入序列号,输入错误会提示错误并退出程序,这是个验证序列号程序查壳:无壳查字符串:有提示语,疑似编码字符串查导入表:使用了字符串操作类函数...,生成序列号,与用户输入进行比对,序列号几乎是编码暴力破解验证逻辑是:生成序列号,通过与用户输入比对来进行验证暴力破解思路是:修改跳转条件即可,把jz改成jmp即可:算法分析注册码生成算法: #include...,得到脱壳后程序再次查壳验证: 查字符串:有点帮助字符串是这些,是验证提示信息查导入表:没有什么特别的点,看起来都是图形界面相关内容,程序使用MessageBoxA弹窗提示调试分析这个程序传参方式比较特别...交叉引用,找到按钮控件处理例程:首先是注册了SEH异常链,然后获取用户输入接下来就是比较+弹窗三连:输入字符串编码字符串进行对比,如果相同,就弹窗提示成果如果不相同,就判断是否输入有内容,如果无内容...:无壳,是 VB 编写 GUI 程序,需要使用 VB 反编译工具进行逆向分析调试分析对于 VB 程序,可以使用 VB Decompiler 进行逆向,本例验证逻辑较为简单,估计主要是练习破解编码校验密码

    1.2K20
    领券