相关疑难解决方法(0)

为什么不能将匿名方法分配给var?

我有以下代码:

Func<string, bool> comparer = delegate(string value) {
    return value != "0";
};
Run Code Online (Sandbox Code Playgroud)

但是,以下内容无法编译:

var comparer = delegate(string value) {
    return value != "0";
};
Run Code Online (Sandbox Code Playgroud)

为什么编译器无法弄清楚它是Func<string, bool>什么?它需要一个字符串参数,并返回一个布尔值.相反,它给了我错误:

无法将匿名方法分配给隐式类型的局部变量.

我有一个猜测,那就是如果编译var版本,如果我有以下内容,它将缺乏一致性:

var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) {
    return false;
};
Run Code Online (Sandbox Code Playgroud)

上面没有意义,因为Func <>只允许最多4个参数(在.NET 3.5中,这就是我正在使用的).也许有人可以澄清这个问题.谢谢.

c# lambda delegates implicit-typing .net-3.5

136
推荐指数
4
解决办法
4万
查看次数

方法使用三元运算符调用

在玩弄新概念时,我偶然发现了Ternary Operator它的美丽.在玩了一段时间之后,我决定测试它的极限.

然而,当我无法编译某段代码时,我的乐趣很快就结束了.

int a = 5;
int b = 10;
a == b ? doThis() : doThat() 

    private void doThis()
    {
        MessageBox.Show("Did this");
    }
    private void doThat()
    {
        MessageBox.Show("Did that");
    }
Run Code Online (Sandbox Code Playgroud)

这行给了我两个错误:

Error   1   Only assignment, call, increment, decrement, and new object expressions can be used as a statement
Error   2   Type of conditional expression cannot be determined because there is no implicit conversion between 'void' and 'void'
Run Code Online (Sandbox Code Playgroud)

我从来没有使用Ternary Operator过来决定调用哪种方法,也不知道它是否可行.我只是喜欢一行If Else Statement方法调用的想法.

我做了一些研究,我找不到任何人这样做的例子,所以我想我可能希望有一些无法提供的东西. …

c# conditional-operator

41
推荐指数
5
解决办法
3万
查看次数