public class Item
{
private int _rowID;
private Guid _itemGUID;
public Item() { }
public int Rid
{
get
{
return _rowID;
}
set { }
}
public Guid IetmGuid
{
get
{
return _itemGuid;
}
set
{
_itemGuid= value;
}
}
}
以上是我的自定义对象。
我有一个清单:
List<V> myList = someMethod;
其中V是Item的类型,我的对象。
我想迭代并获得这样的属性
foreach(V element in mylist)
{
Guid test = element.IetmGuid;
}
当我调试并查看'element'对象时,我可以看到'Quickwatch'中的所有属性,但我不能做element.IetmGuid。
答案 0 :(得分:5)
您是否对通用类型V施加约束?您需要告诉运行时V可以是Item
类型的子类型的任何类型。
public class MyGenericClass<V>
where V : Item //This is a constraint that requires type V to be an Item (or subtype)
{
public void DoSomething()
{
List<V> myList = someMethod();
foreach (V element in myList)
{
//This will now work because you've constrained the generic type V
Guid test = element.IetmGuid;
}
}
}
注意,如果您需要支持多种项目(由Item的子类型表示),则以这种方式使用泛型类是有意义的。
答案 1 :(得分:3)
尝试按照以下方式声明您的列表:
List<Item> myList = someMethod;
答案 2 :(得分:1)
foreach( object element in myList ) {
Item itm = element as Item;
if ( null == itm ) { continue; }
Guid test = itm.ItemGuid;
}
答案 3 :(得分:1)
您的清单应按照以下方式声明:
List<V> myList = someMethod;
其中V是类型项。
然后你的迭代是正确的:
foreach(V element in myList)
{
Guid test = element.IetmGuid;
}