相关疑难解决方法(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万
查看次数

Invoke调用中的匿名方法

我们想要在Control.Invoke中匿名调用委托的语法有点麻烦.

我们已经尝试了许多不同的方法,但都无济于事.

例如:

myControl.Invoke(delegate() { MyMethod(this, new MyEventArgs(someParameter)); }); 
Run Code Online (Sandbox Code Playgroud)

其中someParameter是此方法的本地

以上将导致编译器错误:

无法将匿名方法转换为类型'System.Delegate',因为它不是委托类型

.net c# compiler-errors anonymous-methods

124
推荐指数
6
解决办法
13万
查看次数

为什么必须在作为普通的Delegate参数提供时转换lambda表达式

采取方法System.Windows.Forms.Control.Invoke(Delegate方法)

为什么会出现编译时错误:

string str = "woop";
Invoke(() => this.Text = str);
// Error: Cannot convert lambda expression to type 'System.Delegate'
// because it is not a delegate type
Run Code Online (Sandbox Code Playgroud)

但这很好用:

string str = "woop";
Invoke((Action)(() => this.Text = str));
Run Code Online (Sandbox Code Playgroud)

当方法需要普通代表时?

c# lambda delegates c#-3.0

120
推荐指数
3
解决办法
6万
查看次数

如何在C#中调用匿名函数?

我感兴趣的是,如果可以使用C#编写类似于这个Javascript的代码:

var v = (function()
{
    return "some value";
})()
Run Code Online (Sandbox Code Playgroud)

我能做的最多是:

Func<string> vf = () =>
{
    return "some value";
};

var v = vf();
Run Code Online (Sandbox Code Playgroud)

但是我想要这样的东西:

// Gives error CS0149: Method name expected
var v = (() =>
{
    return "some value";
})();
Run Code Online (Sandbox Code Playgroud)

有没有办法调用函数让它匿名?

c# anonymous-function

21
推荐指数
1
解决办法
1万
查看次数

为什么匿名类不能有lambda属性,但它可以有一个Func <>属性?

我正在尝试学习C#对匿名类型的限制.请考虑以下代码:

  var myAwesomeObject = new {
      fn1 = new Func<int>(() => { return 5; }),
      fn2 = () => { return 5; } 
  };
Run Code Online (Sandbox Code Playgroud)

所以我们有两个实际上是函数的属性:

  • fn1:A Func<int>返回5.
  • fn2:返回的lambda函数5.

C#编译器很乐意使用fn1,但抱怨fn2:

无法将lambda表达式赋给匿名类型属性.

有人可以解释为什么一个是好的但另一个不是吗?

c#

19
推荐指数
1
解决办法
3904
查看次数

什么是C#lambda的编译?一个堆栈框架,一个匿名类型的实例,或?

什么是C#lambda的编译?一个堆栈框架,一个匿名类型的实例,或?

我读过这个问题.这主要回答"为什么"在使用隐式类型功能时不能使用lambda.但是,这个问题的目的是回答编译器生成的构造实际执行lambda的代码.它是一个匿名类型的方法调用(类似于在Java中实现接口的匿名类型吗?),还是只是一个堆栈框架,它引用了闭合变量并接受了参数签名?有些lambda不会关闭任何东西 - 因此编译中有两个不同的结果输出.

c# compiler-construction lambda

15
推荐指数
1
解决办法
2131
查看次数

匿名方法和代理

我试图理解为什么BeginInvoke方法不接受匿名方法.

void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    if (InvokeRequired)
    {
        //Won't compile
        BeginInvoke(delegate(object sender, ProgressChangedEventArgs e) 
        { bgWorker_ProgressChanged(sender, e); });
    }

    progressBar1.Increment(e.ProgressPercentage);
}
Run Code Online (Sandbox Code Playgroud)

它告诉我'无法从'匿名方法'转换为'System.Delegate',而当我将匿名方法转换为委托时,它确实有效吗?

BeginInvoke((progressDelegate)delegate { bgWorker_ProgressChanged(sender, e); });
Run Code Online (Sandbox Code Playgroud)

.net c# delegates anonymous-methods .net-2.0

14
推荐指数
3
解决办法
1万
查看次数

我们可以向引用匿名类型成员的匿名类型添加方法吗?

代码示例并不适用.它们旨在说明我尝试做我认为可行的方法.

// Error: The name First does not exist...
var Contact = new
{
    First = "",
    Last = "",            
    FullName = First + " " + Last
};

// Error: Cannot assign lambda expression to anonymous type property
var Contact = new
{
    First = "",
    Last = "",
    FullName = () => { }
};
Run Code Online (Sandbox Code Playgroud)

c# anonymous-types

5
推荐指数
1
解决办法
3164
查看次数