0

在我的类变量中,当我声明以下任何一项时,编译器会抱怨 T。我也包含了泛型命名空间

 class xyz
 {

    List<T> Labels = null; 

    List<T> Labels = new List<T>();

    public void abc (int a)
    {

    }

 }

谢谢你的帮助。

我不知道为什么有人否决了我的问题?并非所有人都是高级 C#、.NET 程序员。在把问题放在这里之前我做了我的研究,大卫在这里得到了我的困惑,现在我要去学习泛型了。

4

4 回答 4

4

这不是泛型的工作方式。您仍然必须为其提供实际类型。这个符号:

List<T>

基本上意味着“某物List的一个” 。你必须告诉它那是什么。例如,如果它是一个字符串:List

List<string>

List某种自定义类型:

List<MyCustomClass>

等等

泛型仍然像 C# 中的其他任何东西一样是静态类型的,因此编译器需要知道类型。

于 2013-10-17T15:32:32.473 回答
2

T是您要从中创建列表的数据类型的占位符。请参阅此处的示例

public static void Main()
{
    List<string> dinosaurs = new List<string>();

    Console.WriteLine("\nCapacity: {0}", dinosaurs.Capacity);

    dinosaurs.Add("Tyrannosaurus");
    dinosaurs.Add("Amargasaurus");
    dinosaurs.Add("Mamenchisaurus");
    dinosaurs.Add("Deinonychus");
    dinosaurs.Add("Compsognathus");
于 2013-10-17T15:32:54.273 回答
1
    class xyz<T> //T is a type that needs to be made concrete somewhere, so if you need a generic class level field your class also needs to be generic
{

    List<T> Labels = null;

    List<T> Labels = new List<T>();

    public void abc(int a)
    {

    }

}

当然,一如既往,取决于您要做什么!,您可能只是想要

List<string> Labels = new List<string>(); or similar.
于 2013-10-17T15:37:28.890 回答
0

您在这里为类 xyz 定义一个通用字段。类本身也必须是通用的,因此编译器知道 T

class xyz<T>
{
    List<T> Labels = null;

    // more stuff
}
于 2013-10-17T15:36:44.783 回答