首页 > 编程语言 >C# 反射动态判断转换属性类型值生成类实例

C# 反射动态判断转换属性类型值生成类实例

时间:2022-10-28 16:35:14浏览次数:54  
标签:反射 obj string val C# field 实例 PropertyType null

/// <summary>

/// 为指定对象分配参数

/// </summary>

/// <typeparam name="T">待赋值的类型</typeparam>

/// <param name="dic">字段/值</param>

/// <returns></returns>

private T Assign<T>(Dictionary<string, string> dic) where T : new()

{

Type t = typeof (T);

T entity = new T();

var fields = t.GetProperties();



string val = string.Empty;

object obj = null;

foreach (var field in fields)

{

if (!dic.Keys.Contains(field.Name))

continue;

val = dic[field.Name];

//非泛型

if (!field.PropertyType.IsGenericType)

obj = string.IsNullOrEmpty(val) ? null : Convert.ChangeType(val, field.PropertyType);

else //泛型Nullable<>

{

Type genericTypeDefinition = field.PropertyType.GetGenericTypeDefinition();

if (genericTypeDefinition == typeof (Nullable<>))

{

obj = string.IsNullOrEmpty(val)

? null

: Convert.ChangeType(val, Nullable.GetUnderlyingType(field.PropertyType));

}

}

field.SetValue(entity, obj, null);

}



return entity;

}

标签:反射,obj,string,val,C#,field,实例,PropertyType,null
From: https://blog.51cto.com/xxjjing/5805036

相关文章

  • 使用CEfSharp之旅(1) 加载网络页面
    新建工程winform,添加Nuget程序包Cefsharp.winform 本工程使用57.0版本 Cefsharp。请注意使用的版本  staticChromiumWebBrowserweb;privatevoidBrowser......
  • Mybatis出现java.io.IOException: Could not find resource XXX.xml异常
    //使用MyBatis提供的Resources类加载mybatis的配置文件Readerreader=Resources.getResourceAsReader("MenuConfig.xml");这条语句中不会写文件路径解决办......
  • 使用CEfSharp之旅(4)cefsharp 调用F12
    privatevoidbutton1_Click_1(objectsender,EventArgse){web.ShowDevTools();}......
  • web微信js WechatWeb js方法
    获取自己的信息JSangular.element(".info").scope().account;angular.element(".profile_mini").scope().contact获取左边的正在聊天的好友angular.element("#J_NavChatScro......
  • leetcode(32)前缀和系列题目
    303.区域和检索-数组不可变记录前i个元素的和,因此sum[left,right+1]=pre[right+1]-pre[left]classNumArray:def__init__(self,nums:List[int]):......
  • TypeC的CC、UFP、DFP、DRP
    1.CC(ConfigurationChannel):配置通道,这是USBType-C里新增的关键通道。它的作用有检测正反插,检测USB连接识别可以提供多大的电压和电流,USB设备间数据与VBUS的连接建立......
  • leetcode-1446-easy
    ConsecutiveCharactersThepowerofthestringisthemaximumlengthofanon-emptysubstringthatcontainsonlyoneuniquecharacter.Givenastrings,retur......
  • 使用git config --global设置用户名和邮件
    安装好git后,在命令行或终端中使用下面的命令可以设置git自己的名字和电子邮件。这是因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。gitco......
  • 前端代码统计工具cloc的安装与使用
    怎么来衡量一个web端项目的大小,一是看页面多少,二是看源代码行数。页面多少比较好统计,通过Router的配置大概就能知道。但是源代码行数,如果要一个文件一个文件去计算,那就费......
  • MyModel fields ValidationError clean_fields
    classMyModel(models.Model):foo=models.BooleanField()#Wrong!Don'tdothis!defclean_fields(self,exclude=None):#指定某些字段排除验证#Bah!Forg......