相关疑难解决方法(0)

.NET中的通用方法不能推断其返回类型.为什么?

鉴于:

static TDest Gimme<TSource,TDest>(TSource source) 
{ 
    return default(TDest); 
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能这样做:

string dest = Gimme(5);
Run Code Online (Sandbox Code Playgroud)

没有得到编译器错误:

error CS0411: The type arguments for method 'Whatever.Gimme<TSource,TDest>(TSource)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

5可以推断为int,但有编译器将不会/无法解决的返回类型的限制string.我在几个地方读到这是设计但没有真正的解释.我在某处读过这可能会在C#4中发生变化,但事实并非如此.

任何人都知道为什么不能从泛型方法中推断出返回类型?这是其中一个问题,答案是如此明显,它正盯着你的脸?我希望不是!

.net c# type-inference

50
推荐指数
4
解决办法
5556
查看次数

C#3.0泛型类型推断 - 将委托作为函数参数传递

我想知道为什么当C#3.0编译器可以隐式地为同一方法创建委托时,它作为参数传递给泛型函数时无法推断方法的类型.

这是一个例子:

class Test
{
    static void foo(int x) { }
    static void bar<T>(Action<T> f) { }

    static void test()
    {
        Action<int> f = foo; // I can do this
        bar(f); // and then do this
        bar(foo); // but this does not work
    }   
}
Run Code Online (Sandbox Code Playgroud)

我本以为我能够传递foobar编译器推断出Action<T>正在传递的函数的签名的类型,但这不起作用.但是我可以Action<int>foo没有强制转换的情况下创建一个from ,所以有一个合理的原因,编译器也不能通过类型推断做同样的事情吗?

c# generics delegates type-inference c#-3.0

23
推荐指数
4
解决办法
9498
查看次数

标签 统计

c# ×2

type-inference ×2

.net ×1

c#-3.0 ×1

delegates ×1

generics ×1