不知道怎么表达这个东西,先记录一下吧,如果你们有好的想法可以联系我,共同进步

/// <summary>
        /// 自定义属性帮助类
        /// </summary>
        public class AttributeHelper
        {
            /// <summary>
            /// 获取字符串字节长度
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public static int StringToByteLength(string str)
            {
                //使用Unicode编码的方式将字符串转换为字节数组,它将所有字符串(包括英文中文)全部以2个字节存储
                byte[] bytestr = System.Text.Encoding.UTF8.GetBytes(str);
                int j = 0;
                for (int i = 0; i < bytestr.GetLength(0); i++)
                {
                    //取余2是因为字节数组中所有的双数下标的元素都是unicode字符的第一个字节
                    if (i % 2 == 0)
                    {
                        j++;
                    }
                    else
                    {
                        //单数下标都是字符的第2个字节,如果一个字符第2个字节为0,则代表该Unicode字符是英文字符,否则为中文字符
                        if (bytestr[i] > 0)
                        {
                            j++;
                        }
                    }
                }
                return j;
            }
            /// <summary>
            /// 验证字段属性
            /// </summary>
            public void Validate()
            {
                ValidationContext context = new ValidationContext(this, serviceProvider: null, items: null);
                List<ValidationResult> results = new List<ValidationResult>();
                bool isValid = Validator.TryValidateObject(this, context, results, true);

                if (isValid == false)
                {
                    StringBuilder sbrErrors = new StringBuilder();
                    foreach (var validationResult in results)
                    {
                        sbrErrors.AppendLine(validationResult.ErrorMessage);
                    }
                    throw new ValidationException(sbrErrors.ToString());
                }
            }

            /// <summary>
            /// 判断字符串字节长度
            /// </summary>
            public class IsByteLength : ValidationAttribute
            {
                public IsByteLength(string errorMsg, int len)
                {
                    this.ErrorMsg = errorMsg;
                    this.Len = len;
                }
                public string ErrorMsg { get; private set; }
                public int Len { get; private set; }
                protected override ValidationResult IsValid(object value, ValidationContext validationContext)
                {
                    if (value.GetType().Equals(typeof(string)))
                    {
                        if (StringToByteLength(value.ToString()) > Len)
                        {
                            var error = new ValidationResult(ErrorMsg);
                            return error;
                        }
                    }
                    return null;
                }
            }
            public static string ObjToString( object thisValue)
            {
                if (thisValue != null) return thisValue.ToString().Trim();
                return "";
            }

            public class IsFieldVereist : ValidationAttribute
            {
                public string ErrorMsg { get; private set; }
                public string TypeName { get; private set; }
                public IsFieldVereist(string errorMsg, string typeName="")
                {
                    this.ErrorMsg = errorMsg;
                    this.TypeName = typeName;
                }
                protected override ValidationResult IsValid(object value, ValidationContext validationContext)
                {
                    if (!string.IsNullOrWhiteSpace(TypeName))
                    {
                        var tempData = Convert.ChangeType(validationContext.ObjectInstance, validationContext.ObjectType);
                        System.Reflection.PropertyInfo propertyInfo = validationContext.ObjectType.GetProperty(TypeName);
                        if (value != null || !string.IsNullOrWhiteSpace(ObjToString(value)))
                        {
                            if (propertyInfo.GetValue(tempData, null) == null)
                            {
                                var error = new ValidationResult(ErrorMsg);
                                return error;
                            }
                        }
                    }
                    else
                    {
                        if (value == null || string.IsNullOrWhiteSpace(ObjToString(value)))
                        {
                            var error = new ValidationResult(ErrorMsg);
                            return error;
                        }
                    }
                   
                    return null;
                }
            }

        }

C#  自定义特性属性 限制自定义字段 数据的更多相关文章

  1. 1122 django属性操作orm字段数据操作

    目录 1. 静态文件的配置 手动静态文件的访问资源 静态文件的动态绑定 2.request方法 2.1 请求方式 2.2 获取前端的请求方式 request.method 2.3 request方法 ...

  2. C#编程(七十一)---------- 自定义特性

    自定义特性 在说自定义之前,有必要先介绍一些基本的概念. 元数据:就是C#中封装的一些类,无法修改,类成员的特性被称为元数据中的注释 1.什么是特性? (1)属性和特性的区别 属性:属性是面向对象思想 ...

  3. C# 通过自定义特性 实现根据实体类自动创建数据库表

    .Net新手通常容易把属性(Property)跟特性(Attribute)搞混,其实这是两种不同的东西 属性指的类中封装的数据字段:而特性是对类.字段.方法和属性等元素标注的声明性信息 如下代码(Id ...

  4. C#之自定义特性

    在前面介绍的代码中有使用特性,这些特性都是Microsoft定义好的,作为.NET Framework类库的一部分,许多特性都得到了C#编译器的支持. .NET Frmework也允许定义自己的特性. ...

  5. C#特性:从自定义一个特性开始,谈谈什么是特性

    作为C#新手中的一员,我刚开始接触特性时,那真是一脸冏逼啊,怎么想怎么查资料都没弄明白它到底是个什么东西,有的入门教程甚至都没讲特性和反射这些概念!相信很多人第一次接触到特性就是关于系列化的知识了. ...

  6. .net使用自定义类属性

    .net中可以使用Type.GetCustomAttributes获取类上的自定义属性,可以使用PropertyInfo.GetCustomAttributes获取属性信息上的自定义属性. 下面以定义 ...

  7. c#通过反射获取类上的自定义特性

    c#通过反射获取类上的自定义特性 本文转载:http://www.cnblogs.com/jeffwongishandsome/archive/2009/11/18/1602825.html 下面这个 ...

  8. 如何获取类或属性的自定义特性(Attribute)

    如何获取类或属性的自定义特性(Attribute) 问题说明: 在ActiveRecord或者其他的ORM等代码中, 我们经常可以看到自定义特性(Attribute)的存在(如下面的代码所示) [Pr ...

  9. Asp.net core通过自定义特性实现双端数据验证的一些想法

    asp.net core集成了非常方便的数据绑定和数据校验机制,配合操作各种easy的vs,效率直接高到飞起. 通过自定义验证特性(Custom Validation Attribute)可以实现对于 ...

  10. C#自定义特性实例

    元数据,就是C#中封装的一些类,无法修改.类成员的特性被称为元数据中的注释. 1.什么是特性   (1)属性与特性的区别  属性(Property):属性是面向对象思想里所说的封装在类里面的数据字段, ...

随机推荐

  1. Debug调试(使用IDEA的断点调试功能,查看程序的运行过程)

    一. 1. 在有效代码行,点击行号右边的空白区域,设置断点,程序执行到断点将停止,我们可以手动来运行程序 2. 点击Debug运行模式 3. 程序停止在断点上不再执行,而IDEA最下方打开了Debug ...

  2. SQLAlchemy 核心概念与同步引擎配置详解

    title: SQLAlchemy 核心概念与同步引擎配置详解 date: 2025/04/14 00:28:46 updated: 2025/04/14 00:28:46 author: cmdra ...

  3. TGCTF2025 部分题目WP

    TGCTF 2025 Web AAA偷渡阴平 ?tgctf2025=eval(end(current(get_defined_vars())));&b=system('cat /flag'); ...

  4. 云备份技术解析:备份删除&合并原理

    本文分享自天翼云开发者社区<云备份技术解析:备份删除&合并原理>,作者:沈****军 在删除备份副本时,需要根据备份副本包含的数据块以及数据块的引用关系来进行空间的释放.当云硬盘的 ...

  5. 宽带带宽和网速的关系,为什么1m等于128kb

    带宽单位是:b(比特/位) 网速单位/文件下载上传单位:B(字节) 所以,1Mbps = 1/8Mbps = 128kb/s

  6. 代码随想录第九天 | Leecode 151.翻转字符串里的单词、Leecode 28. 找出字符串中第一个匹配项的下标、Leecode 459.重复的子字符串

    Leecode 151.翻转字符串里的单词 题目链接:https://leetcode.cn/problems/reverse-words-in-a-string/description/ 题目描述 ...

  7. 【安装】Windows下安装Anaconda、pytorch,以及修改pip默认安装路径

    写在最前: 如果不打算用conda创建并管理虚拟环境,可以不装Anaconda,随便找个python安装包一路next就行. 文章目录 Windows下安装Anaconda PS:之后的步骤同样适用于 ...

  8. wqs 二分

    初看这个东西可能很难理解,我个人也学习了很多遍,然后发现这个直接理解实际上并不难. wqs 二分主要是解决 恰好分成/选 \(k\) 段 这一类 DP 问题的算法.如果不知道形式可以看一下 P4983 ...

  9. 远程服务器(腾讯云轻量服务器)上安装SQL Server以及SQL Server Management Studio,以及EFCore对其的连接

    SQL Server的安装 下载地址:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 安装教程参考:https://bl ...

  10. 【拥抱鸿蒙】Flutter+Cursor轻松打造HarmonyOS应用(二)

    这是[Flutter+Cursor轻松打造HarmonyOS应用]系列的第二篇.前一篇已经介绍了如何搭建Flutter鸿蒙应用开发环境,就让我们一起来看看如何借助Cursor让鸿蒙App开发更快更简单 ...