我正在一个具有多个位置的库中工作,用户可以在其中插入lambda函数来自定义复杂的后台进程。他们实质上是对该库的工作方式进行了小的修改。该库正在处理动态类型,这些类型是在编译时或在运行时构建的,因此没有可向其添加抽象或虚拟成员的具体类。该库可以处理几十个从几个到大量的lambda定制的客户端定义的配置(每个定制都附加到客户端正在构建的动态定义的结构之一,并传递给该库)。lambda函数的签名可能有点复杂,如下所示:Func<SourceList, PredList, Dictionaries, object>现在,我发现自己在公用接口(interface)和专用接口(interface)以及变量中都重复了此复杂的Func 。就像是:private readonly IList<Func<SourceList, PredList, Dictionaries, object>> _processFunctions = new List<Func<SourceList, PredList, Dictionaries, object>>();public void AddProcessFunction(Func<SourceList, PredList, Dictionaries, object> processFunction){ _processFunctions.Add(processFunction);}用户将执行以下操作:someObject.AddProcessFunction((fromList, predList, dict) => { some process impl }someOtherObj.AddTargettedProcessFunction("Account", (fromList, predList, dict) => { some process impl }...如果必须更改lambda的签名,则必须在许多地方进行修改。我希望有一种方法可以定义一种类型,可以用来将该签名存储在一个地方。我确实发现我可以做到这一点:using ProcessFunc = System.Func<SourceList, PredList, Dictionaries, object>;...private readonly IList<ProcessFunc> _processFunctions = new List<ProcessFunc>();public void AddProcessFunction(ProcessFunc processFunction){ _processFunctions.Add(processFunction);}这可以满足我的要求,但这并不是一个很好的解决方案,因为它必须以完全相同的方式在库中的每个.cs文件中重复(或者相反,每个文件中的别名都可能完全不同,并且仍然可以正常运行,因为这实际上是宏的替代品)。尽管此方法可以大量清理代码并确实减少了Func 定义的重复,但完整的Func 定义仍会在生成的库文档中一遍又一遍地重复,因为完整的定义会在生成的库文档中重复进行。方法签名。这使文档的读者很难看到哪些函数具有相同的lambda,因为它们必须比较多个复杂的参数,它们永远不会看到ProcessFuncTypeA或ProcessFuncTypeB,因此,两个相似但不同的lambda很难在视觉上区分开(当然,对于不同的签名,我会使用好名字)。我所希望的是这样的:public Function ProcessFunc : Func<SourceList, PredList, Dictionaries, object>;有没有更好的方法(或什至另一种方法)在一个位置定义Func 类型并在库中的多个位置重用?我缺少明显的东西吗?谢谢! 最佳答案 C# Reference Source有时可以提供有关如何实现内部结构以及如何实现类似内容的有用提示。因此,带有3个参数的通用Func<>定义为public delegate TResult Func<in T1, in T2, in T3, out TResult>(T1 arg1, T2 arg2, T3 arg3);因此,您可以将特定的Func<>变体定义为public delegate object ProcessFunc(SourceList arg1, PredList arg2, Dictionaries arg3);关于c# - 创建一个C#Func <>类型别名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47897406/ 10-13 06:40