C# 反射动态判断转换属性类型值生成类实例
2013-12-24 10:30
267 查看
/// <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;
}
/// 为指定对象分配参数
/// </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;
}
相关文章推荐
- C# 利用反射动态将字符串转换成属性对应的类型值
- c# 利用反射 从json字符串 动态创建类的实例 并动态为实例成员赋值
- C# 反射给对象属性赋值遇到的问题——类型转换
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- C#强化系列文章五:动态代码的使用(反射和动态生成类)
- C#反射实例——获取及设置对象属性,运行对象方法
- [C#基础]用反射、泛型读取xml后动态创建实例并赋值
- C#强化系列文章五:动态代码的使用(反射和动态生成类)
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- C#利用反射来判断对象是否包含某个属性的实现方法
- C#利用反射机制,获取实例的属性和属性值
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- 实体--C# 反射动态给属性赋值
- 改进篇《不使用反射进行C#属性的运行时动态访问》
- C#利用反射来判断对象是否包含某个属性的实现方法
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- c# 写的一个类帮助器(动态生成类 动态类 动态属性)
- c#解决Nullable类型的转换 (包含DataContract的序列化和反序列化以及 该例子应用在反射属性setvalue的时候有用)
- C#中利用反射,动态生成类的实例
- 不使用反射进行C#属性的运行时动态访问