作为在我正在开发的库中引入延迟格式化评估的一种方法,我已经定义了委托
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表达式中的类型限定参数?有没有办法来控制这种行为?
我正在寻找答案,但找不到相关的东西.我学会了在使用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)
有什么不同?
谢谢
Unity C#似乎不将Func<>符号识别为函数委托.那么,我如何将函数作为函数参数传递?
我有一个Invoke(functionName, 0)可能会有所帮助的想法.但我不确定它是否实际上立即调用该函数,或等待帧的结束.还有另外一种方法吗?