1

例如,函数原型是:

 void set<V>(Type a, V b);

我们称之为:

 int a;
 list<int> b;

set<List<int>>(a,b); 
4

3 回答 3

1

您可以使用这样的通用约束:

 void set<TList, TElement>(TElement value, TList list)
      where TList: IList<TElement>;
于 2012-11-08T04:46:59.390 回答
1

(我将在我的答案前面提醒参数和参数之间的区别:参数是某些东西的“占位符”,而参数是填充参数的值。(因此术语“参数参数”) . 例如,类List<TFoo>有一个名为 的参数TFoo,但实例List<String>有一个参数String的参数TFoo。)。

类型是“通用”或“具体”(即非通用)。

泛型类型参数参数可以是任何类型,具体的或泛型的。一个泛型类型的所有参数都填充了具体的类型参数,它本身就变成了具体的;所以List<String>是具体的,因为String是具体的,但List<TFoo>不是具体的,因为TFoo是类型参数。

因此,很容易看出泛型类可以递归嵌套,无论是泛型形式还是具体形式。当然,您只能在泛型类或方法上下文中使用泛型形式,例如以下是完全合法的:

private static IEnumerable<List<Dictionary<String,Int32>>> foo = new Collection<List<Dictionary<String,Int32>>>(); // this is completely concrete

static void DoSomething<TBaz>(IEnumerable<List<Dictionary<TBaz,Int32>>> baz) { // this is generic because TBaz is not specified

   List<TBaz> someList = new List<TBaz>(); // you can use the undefined TBaz because it's listed in the generic method's type arguments.
}

static void Main() {
    DoSomething( foo ); // the compiler will infer TBaz from the String argument used in the foo field
}
于 2012-11-08T04:47:52.420 回答
1

我想你是想问你是否可以Type a具体到V......

如果这是您的问题,那么是的,您必须像这样定义方法:

void set<V>(V a, List<V> b)

如果您打算a成为 type Type,那么对于List<int>被允许作为类型参数的问题是肯定的。但是,您的示例无法编译,因为aisint和 not Type

于 2012-11-08T04:50:13.940 回答