C#关于通过反射PropertyType判读字符串类型方法
2017-09-21 20:01
246 查看
今天在通过反射判读实体属性来映射数据库表是否修改的时候发现,最开始我通过
来判断的时候,只能判断出实体中是否为值类型和null,如果满足就不会去修改该属性的值
但是在实际使用中发现,如果该model类中既有class实体类型,又有string类型将无法判断(string是值类型还是引用类型,可以看看该帖子http://www.cnblogs.com/yank/archive/2011/10/24/2204145.html说的比较详细),所以我们需要单独判断一下string类型,可能有人说通过IsNullOrEmpty来判断,那么我告诉你在通过反射来做的时候是行不通的,因为对应的属性值可能为null,通过IsNullOrEmpty判断class为null时直接回抛异常的,通Type.getType()也是行不通的,因为string a=null通过Type.getType(a)也会抛异常。所以还是需要通过PropertyType类型来判断,判断方式为 p.PropertyType == typeof(string) 这样即可判断出来。好了就到这里,部分代码如下,不喜勿喷。
p.GetValue(entity) == null && p.PropertyType.IsValueType
来判断的时候,只能判断出实体中是否为值类型和null,如果满足就不会去修改该属性的值
_dbContext.Entry<T>(entity).Property(p.Name).IsModified = false;
但是在实际使用中发现,如果该model类中既有class实体类型,又有string类型将无法判断(string是值类型还是引用类型,可以看看该帖子http://www.cnblogs.com/yank/archive/2011/10/24/2204145.html说的比较详细),所以我们需要单独判断一下string类型,可能有人说通过IsNullOrEmpty来判断,那么我告诉你在通过反射来做的时候是行不通的,因为对应的属性值可能为null,通过IsNullOrEmpty判断class为null时直接回抛异常的,通Type.getType()也是行不通的,因为string a=null通过Type.getType(a)也会抛异常。所以还是需要通过PropertyType类型来判断,判断方式为 p.PropertyType == typeof(string) 这样即可判断出来。好了就到这里,部分代码如下,不喜勿喷。
foreach (System.Reflection.PropertyInfo p in entity.GetType().GetProperties())
{
if (p.GetValue(entity) == null && (p.PropertyType.IsValueType || p.PropertyType == typeof(string)))
{
_dbContext.Entry<T>(entity).Property(p.Name).IsModified = false;}
}
相关文章推荐
- C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法
- C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法
- C# 通过反射获取MVC Controller里的类名,方法名,参数列表,返回值类型,Description描述,自定义Attribute
- c#反射Type类型的一些方法介绍
- C#中通过反射方法获取控件类型和名称
- c# 反射时GetType方法查找Type的分析
- C# 通过反射类动态调用DLL方法
- Type通过类型调用拷贝构造函数构建对象(反射)
- 关于C#中货币类型和数值类型、字符串类型的转化和在DataGridView中的显示问题:
- C#通过反射调用泛型参数方法介绍
- 分享一段C#反射代码-[Type是反射的入口]--[查看类型信息]--[动态生成对象]
- C# 控制台输入输出非字符串类型数据的方法[进制数字转换为八进制数字]
- C# 关于字符串中 符合正则表达式的指定字符的替换的方法
- C#语言之“string格式的日期时间字符串转为DateTime类型”的方法
- C#中通过Type类访问数据类型信息
- 关于Record类型RTTI反射的用途和方法
- C# 关于反射类[System.Reflection] 根据类名 动态调用 类方法
- 关于Record类型RTTI反射的用途和方法
- C#中通过Type类访问数据类型信息
- C# 关于判断字符串为空的一些方法