【发布时间】:2020-05-13 17:27:03
【问题描述】:
我看到关于这个主题有一些老问题(2011 年),只是想知道是否有任何我可能错过的改变。主题领域是自动类型推导,特别是在声明变量时。这里的目标是通过避免代码中的重复来减少打字,从而减少错误。理想情况下,解决方案应该具有零运行时开销,并且阅读代码的人易于理解。
我有一个函数
(tuple-type-decl) Function(param-list) { body }
我想声明一个变量
var list = new List<return-type-of-function>();
[添加]一个具体的例子
var list = new list<typeof Function(default,fault)>();
也就是说,我希望编译器向 List 提供类型参数以及函数返回的类型,而无需重新键入或显式命名该类型。我在这里寻找一个成语,而不是如何解决特定的用例。
当然,我不能直接在 C# 中执行此操作。我认为现代 C++ 实际上会让我基本上编写该声明,但 C# typeof 运算符仅适用于类型,不适用于表达式。我能想到的最好的(而且远非“好”)是:
var list = (from i in Enumerable.Range(0,0) select Function(bogus-parms).ToList();
这实际上确实声明了一个正确类型的列表,甚至从元组类型中提取了伪成员名称,但它很笨拙且远非清晰,并且实际上具有运行时成本,尽管很小。
有没有人在 C# 7/8 时代为这个构造想出一个像样的成语?
【问题讨论】:
-
请分享可重复的样本。另外,
tuple-type-decl与return-type-of-function有什么关系? -
@PavelAnikhouski 特定类型并不重要 - 插入任何元组类型和任何参数列表以及任何您想要的函数体。目标是声明一个具有基于函数返回类型的类型的变量,而不是简单地重新声明类型(可能是复杂的或匿名的)。
-
我应该在原始帖子中更清楚地说明 - 练习的重点是声明变量而不重复类型的定义(本例中为元组)并且不创建新类对于我想从函数返回的每种杂项元组类型。这允许变量声明随着函数的发展而减少编辑 - 向元组添加一个新成员,变量声明自动正确。以此类推。