【问题标题】:How do I access a variable in a generic class如何访问泛型类中的变量
【发布时间】:2018-02-01 12:08:09
【问题描述】:

Console.WriteLine(item.type) 的以下代码出现 CS1061 错误,这对我来说似乎很简单。

有人可以帮我吗?

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            LocalPage lp = new LocalPage();
            lp.Put();
        }
    }
    public class LocalDataFolder
    {
        public LocalDataFolder() { }
        public int type;
    }
    public class PicturePage<T>
    {
        public List<T> folders = new List<T>() { };
        public void Put()
        {
            foreach (T item in folders)
                Console.WriteLine(item.type); 
        }
    }
    public class LocalPage : PicturePage<LocalDataFolder>
    {
        public LocalPage()
        {
            folders.Add(new LocalDataFolder());
        }
    }
}

【问题讨论】:

  • 错误消息是什么?你没有提到那个。您也没有使用您正在使用的编程语言标记您的问题。我确实在网上查找了 CS1061 消息(您也可以这样做),它说 type' 不包含 'member' 的定义。这告诉我您的 item 没有名为 type 的成员,因此 item.type 是对不存在的成员 (type) 的无效引用。您需要检查item 的类型并了解它有哪些成员。
  • 泛型不是动态类型。查看有关限制类型的答案。

标签: c# class variables generics


【解决方案1】:

不受约束的泛型只能访问object 类型上可用的方法或属性。

一个约束,例如@Mark-Yisri 指定的约束,允许访问与该约束匹配的方法和属性,但随后限制了允许与泛型类型或方法一起使用的类型。

此约束将泛型限制为使用 LocalDataFolder 或从 LocalDataFolder 继承的类,但允许访问 LocalDataFolder 类型的对象中可用的方法和属性。

public class PicturePage<T> where T : LocalDataFolder

【讨论】:

    【解决方案2】:

    item.type 正确吗?在 Java 泛型中不能有任何与之关联的字段,您必须使用 T extends LocalDataFolder。不确定 C# 中的相关语法是什么。

    试试这个:

    public class PicturePage<T> where T : LocalDataFolder
    {
        public List<T> folders = new List<T>() { };
        public void Put()
        {
            foreach (T item in folders)
                Console.WriteLine(item.type); 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-12-29
      • 2021-04-09
      • 2013-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 2020-04-21
      相关资源
      最近更新 更多