【发布时间】:2015-10-04 06:58:39
【问题描述】:
我有以下情况。假设我收到字符串值列表。我必须将这些值分配给模型中的特定类型属性。 型号示例:
public int ID { get; set; }
public DateTime? Date { get; set; }
类型转换没有问题,因为我使用 System.reflection 获取属性类型数组并使用 Convert.ChangeType(string value, type)。 但是,我不能将 Convert.ChangeType 结果分配给模型属性,因为它返回的对象不是我想要的值类型。 我的问题的一个简短示例:
string s1 = "1";
string s2= "11-JUN-2015";
PropertyInfo[] matDetailsProperties = Model.GetType().GetProperties();
List<Type> types = new List<Type>();
foreach(var item in Model)
{
types.Add(item.PropertyType);
}
Model.ID = Convert.ChangeType(s1, types[0]);
Model.Date = Convert.ChangeType(s2, types[1]);
这不起作用,因为 Convert.ChangeType 返回对象,我不能只使用 (dateTime)Convert.ChangeType(...),这是“脏代码”,因为我有具有 17 个不同类型属性的模型。如果我可以使用 (Type[0])Convert.ChangeType(...) 那就完美了,但在 C# 中这是不可能的
【问题讨论】:
-
这似乎是一件很奇怪的事情——你能提供一些背景信息吗?
-
您如何知道将运行时类型为
types[1]的s2分配给名为Date的属性,但不知道Date的类型DateTime?(因此,types[1]似乎是多余的) -
@Damien_The_Unbeliever,他的代码确实知道。不幸的是,OP 认为仅仅写出一个简单的模型填充函数是“脏”代码,他希望通过反射来创建它。
标签: c# asp.net-mvc type-conversion typeof dynamictype