我的代码示例:
public abstract class<T>
{
public List<T> GetSomething(string q)
{
**List<T> list = new List<T>();**
Type type = typeof(T);
PropertyInfo[] props = type.GetProperties(BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance);
foreach (PropertyInfo info in props)
{
// at this point I need to return information from a data source query
// and build the members (set values) according to the returning results
// which needs to be added to a list that contains T with each property
// within set to a value. "Some Value" should be an object instance required
// by the Type of the PropertyInfo.
info.SetValue(type, "Some Value", null);
**list.Add(type);**
}
}
**return list;**
}
由于模板类型,info.SetValue(object,object,object [])无法访问,对吗?我的问题是,如何在属性中设置一个值,包含在T?
中编辑:这个问题甚至让我感到困惑。我修改了上面的程序来代表我的直接需求。
谢谢, 埃里克
答案 0 :(得分:2)
我看不出这有什么意义。您正尝试在T的实例上设置属性(如绑定标志所示),但是您要将typeof(T)
- 类型 - 传递给{ {1}}作为第一个参数。也许你的意思是:
PropertyInfo.SetValue
在这种情况下,我们将一个T实例传递给GetSomethingFrom方法,然后将实例传递给SetValue。遵循?
-Oisin
答案 1 :(得分:0)
断言您设置的属性实际上也是字符串或者调用SetValue(实例,“Some Value”,null)将会抛出。
可能是个好主意。您似乎正在尝试创建通用对象初始值设定项。反射将起作用,但我建议调查System.Linq.Expressions命名空间。您可以使用反射来构建一个LambdaExpression,您可以将其动态编译为一个方法,该方法的性能比每次使用反射初始化对象要好得多。