你能用Func <T>类型命名参数吗?

mav*_*vnn 19 c# anonymous-function

我有一个"调度图"定义如下:

private Dictionary<string, Func<DynamicEntity, DynamicEntity, IEnumerable<DynamicEntity>, string>> _messageProcessing;
Run Code Online (Sandbox Code Playgroud)

这允许我根据DynamicEntity实例的名称轻松地分派到不同的方法.

为了避免被更多地维护代码的每个人所厌恶,有没有办法在Func中命名参数以给出哪些DynamicEntity是哪个?

Luk*_*keH 27

你不能使用内置Func类型,但是很容易创建自己的自定义委托类型并以类似的方式使用它:

_messageProcessing.Add("input", (x, y, z) => "output");
_messageProcessing.Add("another", (x, y, z) => "example");

// ...

delegate string DispatchFunc(DynamicEntity first, DynamicEntity second,
                             IEnumerable<DynamicEntity> collection);

Dictionary<string, DispatchFunc> _messageProcessing;
Run Code Online (Sandbox Code Playgroud)


Pha*_*raz 18

从C#7开始,您可以通过这种方式使用命名元组实现它:

Func<(string firstName, string lastName), string> f = (data) => data.firstName + data.lastName;
f(("Foo", "Bar"));
Run Code Online (Sandbox Code Playgroud)


the*_*kip 7

您可以创建一个包含"参数"的类并将其提供给func?这样你可以将它们命名为任何你想要的东西.

据我所知,你不能将它们命名为内联.

  • 这可能是该问题最干净的解决方案。您最终得到的参数也不是 10 个,而是 1 个。 (2认同)