我正在使用VB => C#翻译,我遇到了一些我不确定直接转换为C#的VB代码。
在VB中,您可以执行类似
的操作If {"a", "b", "c"}.Contains("c") Then ...
(让我们假装一些有用的东西,永远不会真实)
我想知道的是,在C#中是否有相同的内容。我能想出的最接近的是
if (new object[] {"a", "b", "c"}.Contains("c")) { ... }
我的问题是我必须在C#中定义类型,这意味着我必须使用对象 - 因为我正在编写一个翻译器,它需要同样适用于数组int
的数组,bool
的数组,自定义类的数组等。我不确定让所有内容都是对象而不是更具体的类型是个好主意。
有没有办法让编译器找出类型?逻辑上这样的东西:(我知道这不行,但在逻辑上等同于......)
if (new var[] {"a", "b", "c"}.Contains("c")) { ... }
所以它将数组视为字符串数组,并将Contains参数视为字符串?
附带问题:我认为上面的VB代码将{"a", "b", "c"}
视为string
的数组。它是否正确?上面的VB代码是否会处理" a"," b"和" c"作为对象可能 - 如果是这样我也会在C#中使用对象。
答案 0 :(得分:9)
如果所有数组元素都是相同的类型,或者它们是不同类型但是以满足类型推断的方式,则可以使用隐式类型数组 - 如{{1}但对于数组,基本上是:
var
我不知道这在语义上是否与VB代码相同。
答案 1 :(得分:0)
关于附带问题:
fragment from 'Arrays in Visual Basic' on Microsoft Docs
Dim numbers = New Integer() {1, 2, 4, 8} Dim doubles = {1.5, 2, 9.9, 18}
使用类型推断时,确定数组的类型 通过为其提供的值列表中的主导类型 数组文字。主导类型是所有其他类型的唯一类型 数组文字中的类型可以加宽。如果这种独特的类型不能 确定后,主导类型是所有其他类型的唯一类型 数组中的类型可以缩小。如果这些独特类型都不是 确定后,主导类型为
Object
。例如,如果列表 提供给数组文字的值包含类型的值Integer
,Long
和Double
生成的数组的类型为Double
。都Integer
和Long
仅扩展到Double
。因此,Double
是 主导型。有关详细信息,请参阅Widening and Narrowing Conversions。