相关疑难解决方法(0)

使用委托和Lambda的奇怪行为

作为在我正在开发的库中引入延迟格式化评估的一种方法,我已经定义了委托

public delegate string MessageFormatterDelegate(string message, params object[] arguments);
public delegate string MessageFormatterCallback(MessageFormatterDelegate formatterDelegate);
Run Code Online (Sandbox Code Playgroud)

以及下一课的内容

public static class TestClass
{
    public static string Evaluate(MessageFormatterCallback formatterCallback)
    {
        return (formatterCallback(String.Format));
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这表现得非常奇怪:从外部项目运行时,语句

Console.WriteLine(TestClass.Evaluate(message => message("{0},{1},{2}", 1, 2, 3)));
Run Code Online (Sandbox Code Playgroud)

没有编译,与错误而失败

Error   1   Delegate 'MessageFormatterDelegate' does not take 4 arguments
Run Code Online (Sandbox Code Playgroud)

Console.WriteLine(TestClass.Evaluate((MessageFormatterDelegate message) => message("{0},{1},{2}", 1, 2, 3)));
Run Code Online (Sandbox Code Playgroud)

编译和工作没有问题,1,2,3在控制台中打印.为什么我必须message使用MessageFormatterDelegate第二个lambda表达式中的类型限定参数?有没有办法来控制这种行为?

c# lambda .net-3.5

15
推荐指数
2
解决办法
1089
查看次数

你需要使用Invoke on Action吗?

我正在寻找答案,但找不到相关的东西.我学会了在使用Action.Invoke()时使用Action,但你真的需要使用.Invoke吗?

说我有这个动作:

Action<int> action = x =>
{
    Console.WriteLine(x + 1);
};
Run Code Online (Sandbox Code Playgroud)

我用的是:

action.Invoke(2);
Run Code Online (Sandbox Code Playgroud)

要么

action(2);
Run Code Online (Sandbox Code Playgroud)

有什么不同?

谢谢

c# action

2
推荐指数
1
解决办法
217
查看次数

将函数作为函数参数传递

Unity C#似乎不将Func<>符号识别为函数委托.那么,我如何将函数作为函数参数传递?

我有一个Invoke(functionName, 0)可能会有所帮助的想法.但我不确定它是否实际上立即调用该函数,或等待帧的结束.还有另外一种方法吗?

c# unity-game-engine

2
推荐指数
1
解决办法
181
查看次数

标签 统计

c# ×3

.net-3.5 ×1

action ×1

lambda ×1

unity-game-engine ×1