我已经像这样扩展了IDictionary:
public static T ToClass<T>(this IDictionary<string, string> source) where T : class, new()
{
T someObject = new T();
foreach (KeyValuePair<string, string> item in source)
{
someObject.GetType().GetProperty(item.Key).SetValue(someObject, item.Value, null);
}
return someObject;
}
我在使用该方法时遇到了麻烦,尝试过这样:
TestClass test = _rep.Test().ToClass<TestClass>;
它说它无法转换为非委托类型。
调用它的正确方法是什么?
/拉塞
将代码更改为:
public static T ToClass<T>(this IDictionary<string, string> source) where T : class, new()
{
Type type = typeof(T);
T ret = new T();
foreach (var keyValue in source)
{
type.GetProperty(keyValue.Key).SetValue(ret, keyValue.Value, null);
}
return ret;
}
答案 0 :(得分:5)
你错过了最后的括号:
TestClass test = _rep.Test().ToClass<TestClass>();
编译器认为您希望将方法(委托)分配给变量。
此外,您可以使用someObject.GetType()
代替typeof(T)
,而是在循环外创建一个变量并重复使用它。