我需要一个具有扩展搜索机制的通用列表,因此我创建了一个具有额外索引器的通用列表(基础List<T>
)。在这个例子中,如果T是一个对象,那么列表允许根据一个字段获取项目。下面是示例代码
public class cStudent
{
public Int32 Age { get; set; }
public String Name { get; set; }
}
TestList<cStudent> l_objTestList = new TestList<cStudent>();
l_objTestList.Add(new cStudent { Age = 25, Name = "Pramodh" });
l_objTestList.Add(new cStudent { Age = 28, Name = "Sumodh" });
cStudent l_objDetails = l_objTestList["Name", "Pramodh"];
和我的通用列表
class TestList<T> : List<T>
{
public T this[String p_strVariableName, String p_strVariableValue]
{
get
{
for (Int32 l_nIndex = 0; l_nIndex < this.Count; l_nIndex++)
{
PropertyInfo l_objPropertyInfo = (typeof(T)).GetProperty(p_strVariableName);
object l_obj = l_objPropertyInfo.GetValue("Name", null); // Wrong Statement -------> 1
}
return default(T);
}
}
}
但是我不能得到属性的值,它抛出'Target Exception'。
请帮我解决这个问题
这行代码应该是这样的…
object l_obj = l_objPropertyInfo.GetValue("Name", null);
=>
object l_obj = l_objPropertyInfo.GetValue(this[l_nIndex], null);
GetValue函数的第一个参数是要从中检索属性值的对象实例。