【发布时间】:2016-03-17 16:29:00
【问题描述】:
考虑以下函数:
public void DoSomething<TSource>(TSource data)
{
// ...
}
在 C# 中,编译器可以通过检查方法的参数来隐式推断 TSource 的类型:
DoSomething("Hello") // Works fine. DoSomething<string>("Hello") is called.
当有通用返回值时,为什么我们不能这样做?
例如:
public TResult DoSomething<TResult, TSource>(TSource data)
{
// ...
}
TResult 无法推断(我明白为什么),但编译器肯定可以推断TSource 的类型,不是吗?
但是,这不会编译:
int result = DoSomething<int>("Hello"); // This should call DoSomething<int,string>("Hello")
【问题讨论】:
-
C#就是这样。要么给它所有通用参数,要么不给它,只要它们可以被推断出来。不能半途而废。但不确定其技术原因。