声明成员变量并初始化而不重复类型

时间:2018-04-11 17:23:02

标签: c# .net vb.net

在C#中我可以用一种方法来做到这一点:

var Content = new Dictionary<string, System.Text.StringBuilder>();

在VB.Net中,我可以用一种方法做到这一点:

Dim Content = new Dictionary(of string, System.Text.StringBuilder)

然而在VB中我还可以在定义字段/成员变量时在方法之外执行此操作(注意,在这种情况下,VB不会推断类型,它是明确地获取它,这是在VB.Net之前'选项推断'):

Dim Content AS new Dictionary(of string, System.Text.StringBuilder)

在C#中,似乎我必须这样做:

Dictionary<string, System.Text.StringBuilder> Content = new Dictionary<string, System.Text.StringBuilder>();

注意我必须重复两次类型。

这是一个简单的例子,对于更复杂的情况,它确实至少有点烦人。

我无法相信VB中的某些东西更紧凑;我在这里错过了什么吗?如何声明成员变量并初始化而不重复类型?

修改

来自Ron评论中提到的Eric Lippert文档:“... 如果我们的目标是删除冗余,我宁愿以其他方式删除它。使这个合法:private static readonly Dictionary niceNames = new()...也就是说,在声明中明确说明类型,然后让“new”操作符聪明地根据它被分配给的类型来确定它正在构造什么类型。 “
所以有一个想法由Eric自己提出如何做到 - 这真的是VB所做的一切。 (顺便说一句,很好地找到那份文件)

2 个答案:

答案 0 :(得分:2)

您不能不重复该类型,但如果类型很复杂,您可以使用别名(使用“using”语句创建)。

答案 1 :(得分:1)

现在,在C#9.0中,我们已经使用目标类型的new表达式来实现@EricLippert的建议。

Dictionary<string, System.Text.StringBuilder> Content = new();