2011-11-22 43 views
5

挡板。为什么在使用命名参数时不编译此C#代码?

class Test 
{ 
    void Main() 
    { 
     F(() => "");    // ok 
     F(named:() => "");   // 'T' cannot be inferred from the usage! 
     F<string>(() => "");  // ok 
     F<string>(named:() => ""); // ok 
    } 

    void F<T>(Func<T> named) { } 
} 

有人能告诉我为什么到F的第二次调用编译失败? (请注意,这是一个非常简化的例子,这就是为什么它看起来是合成的。在真实情况下,我遇到了,'named'之前有一些默认参数,因此命名参数是必需的,所以,显然是调用者对'T'的明确规定。)

+1

在编译器的委托类型推断中似乎是不足的。 – Jeff

+0

听起来很可能。如果您将该评论转换为答案,我会接受。 – scobi

回答

1

看起来像编译器的委托类型推断中的不足之处...对不起,我不能提供更多。

+0

为什么downvote?没有人愿意回答,作者说:“听起来很可能,如果你把这个评论作为答案,我会接受。” – Jeff

+0

至少我可以通过投票将它推回到0,嘿。 – scobi

相关问题