C#转VB问题

时间:2011-02-23 06:31:28

标签: c# vb.net c#-to-vb.net

您好我正在尝试将一些代码从C#转换为VB但由于我缺乏对C#(或者VB)的了解,我遇到了一些问题。我希望有更多技能的人可以帮我。

我在这里使用转换工具: http://www.developerfusion.com/tools/convert/csharp-to-vb/ 转换这里找到的一些代码: http://www.urmanet.ch/?p=11

该代码旨在制作EF实体的深层副本。

纠正&&在第87行,转换完成正常。稍后进行了一些导入并修复了一些简单的错误,我无法解决的其余错误如下:

1:行

<System.Runtime.CompilerServices.Extension()> _
    Public Shared Function Clone(entityObject As EntityObject) As EntityObject

标记为扩展方法只能在模块中定义。它是在一个类中定义的,但我认为这在C#中有效,那为什么我会在VB中得到这个错误?

2:有很多这样的行:

For Each [property] As var In properties

其中'as var'部分被标记为未定义;我不完全确定'as var'是什么意思,我可以删除它并允许编译器推断出类型吗?

3:这行代码出错:

Dim t = GetType(EntityCollection(Of )).MakeGenericType(New () {[property].PropertyType.GetGenericArguments()(0)})

在'''后面有一个波浪形,表示预期类型,我不知道该怎么做这条线,因此如何解决它,是否有人能够澄清一点?

4:该行

Private Shared ReadOnly _tracking As New List()

通知我System.Collections.Generic.List(Of T)的类型参数太少。这是因为C#和VB之间存在一些差异吗?

非常感谢任何建议。

3 个答案:

答案 0 :(得分:5)

  1. 转到here,了解扩展方法在VB中的工作原理。如果有很多这些手动转换它们可能会很繁琐。也许你应该考虑将它们留在C#中,因为代码编译成相同的中间语言。

  2. var表示编译器推断出类型。

  3. 在C#中你可以说`new [] {1,2,3},编译器会根据元素推断出你的数组类型,但我不知道这是否适用于VB

  4. 您必须将类型放在括号中以创建正确的泛型类型。像New List(string)

  5. 这样的东西

答案 1 :(得分:3)

如果您发布原始C#代码,而不仅仅是您尝试转换失败,那么这样的问题更容易回答。就像现在一样,我们只能猜测代码应该做什么,而不是自己进行转换。

但无论如何我都会猜测......

  1. 据推测,有问题的代码实际上是在C#中的static类中声明的。出于兼容性原因,这些在VB.NET中称为“模块”。他们的工作方式完全相同;相信编译器的建议并将扩展方法移到模块中。

  2. 声明变量as var是您在C#中执行anonymous typing的方法。 VB.NET中的等价物是在项目的属性中打开Option Infer。您将需要删除as var声明,然后编译器将自动推断变量的类型,就像在C#中一样。

  3. 我不知道这行代码的目的是什么,因为您没有在C#中显示原始工作代码,但您需要删除New并更改声明数组的方式:

    Dim t = GetType(EntityCollection(Of )).MakeGenericType([property].PropertyType.GetGenericArguments()(0))
    
  4. 不,这不是由于VB.NET和C#之间的差异造成的。这是因为您使用了通用List(Of T)类,但未能指定要使用的类型。例如,您的代码应如下所示:

    Private Shared ReadOnly _tracking As New List(Of Integer)
    

答案 2 :(得分:1)

对于#3,MakeGenericType方法需要一个Type的可变数组。您可以使用Dim t = GetType(EntityCollection(Of )).MakeGenericType([property].PropertyType.GetGenericArguments()(0))

完成此操作

对于#4,我无法想象如何在C#中编译。但是,查看完整的源代码似乎Private Shared ReadOnly _tracking As New List(Of SelfReferencesTracking)是正确的。