如何访问泛型类

时间:2018-02-01 12:08:09

标签: c# class variables generics

我在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());
        }
    }
}

2 个答案:

答案 0 :(得分:3)

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

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

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

public class PicturePage<T> where T : LocalDataFolder

答案 1 :(得分:1)

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