迭代C#中的通用列表

3 c# generics

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;
            }

        }

}    
Run Code Online (Sandbox Code Playgroud)

以上是我的自定义对象.

我有一个清单:

List<V> myList = someMethod;
Run Code Online (Sandbox Code Playgroud)

其中V是Item类型,我的对象.

我想迭代并获取属性

foreach(V element in mylist)
{
   Guid test = element.IetmGuid; 
}
Run Code Online (Sandbox Code Playgroud)

当我调试并查看'element'对象时,我可以看到'Quickwatch'中的所有属性,但我不能做element.IetmGuid.

akm*_*mad 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;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

注意,如果您需要支持多种项目(由Item的子类型表示),则以这种方式使用泛型类是有意义的.