我理解这句话: -
List<string> a;
这意味着a只能包含string类型的值.
但是当与方法一起使用时我会感到困惑.例如.
public T1 methodName <T1,T2>(T1 t, T1 p)
我知道该方法返回类型的对象T1并接受T1 类型的对象.但是有什么意义<T1,T2>呢?为什么需要它?
编辑: -
基于我收到的答案,我猜<T1, T2>是有,所以输入参数看起来相似.如果<T1>在那里,则所有输入参数必须是T1类型,如果<T1,T2>存在则意味着所有参数必须是T1或者类型T2
但这句话究竟是什么意思: -
public static TSummary Accumulate <TInput, TSummary> (IEnumerable <TInput> coll, Action <TInput, TSummary> action)
该定义说,所有的输入必须在任TInput或TSummary但第二个参数是类型Action.所以我仍然感到困惑.
提前致谢 :)
如果方法确实是按照您输入的方式确定的:
public T1 methodName <T1, T2>(T1 t, T1 p)
Run Code Online (Sandbox Code Playgroud)
...然后T2与参数类型或返回类型无关.然而,它可能会影响方法内部发生的事情(例如,该方法可以在内部调用typeof(T2)并对其执行某些操作).
如果它是一个拼写错误,并且第二个参数应该读取T2 p,那么DaeMoohn是正确的.
更新:
如果
<T1>在那里,则所有输入参数必须是T1类型,如果<T1,T2>存在则意味着所有参数必须是T1或T2类型
没有!不准确的!
参数的类型在参数声明中指定:(T1 t, T1 p)- 两者都必须是类型T1(就像声明参数一样,(int x, int y)它们都必须是int).
我们来看看那个Accumulate签名:
public static TSummary Accumulate <TInput, TSummary> (IEnumerable <TInput> coll, Action <TInput, TSummary> action)
Run Code Online (Sandbox Code Playgroud)
此方法采用一些TInput值(coll)和一些委托指向接受a TInput和TSummaryparameter(action)的方法.该方法返回一个类型的对象TSummary.
你的第一个例子令人困惑的是,泛型类型参数之一,T2恰好不在方法签名本身的任何地方.这只是意味着T2是都不相关的参数或者返回值.但它仍然可以在方法中使用.
例如,考虑这个(虚构的)方法:
string GetTypeName<T>();
Run Code Online (Sandbox Code Playgroud)
T上述签名意味着什么?它不是返回类型(string),也不在参数列表中(没有).这有什么意义吗?据推测,它表明你想要什么类型的名字.因此,内部方法可能如下所示:
return typeof(T).FullName;
Run Code Online (Sandbox Code Playgroud)
这里的要点是,T2在您的第一个示例中,必须(如果有的话)只影响方法本身的内部.还是那句话:这是不相关的参数或者返回值.
| 归档时间: |
|
| 查看次数: |
240 次 |
| 最近记录: |