Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#到VB的转换问题_C#_Vb.net_C# To Vb.net - Fatal编程技术网

C#到VB的转换问题

C#到VB的转换问题,c#,vb.net,c#-to-vb.net,C#,Vb.net,C# To Vb.net,您好,我正在尝试将一些代码从C#转换为VB,但由于缺乏C#(或者VB)知识,我遇到了一些问题。我希望有更熟练的人能纠正我的错误 我在这里使用转换工具: 要转换此处的某些代码,请执行以下操作: 该代码旨在制作EF实体的深度副本 在第87行更正&&后,转换完成OK。之后进行了一些导入并修复了一些简单错误,我无法解决的其余错误如下: 1:线路 <System.Runtime.CompilerServices.Extension()> _ Public Shared Functio

您好,我正在尝试将一些代码从C#转换为VB,但由于缺乏C#(或者VB)知识,我遇到了一些问题。我希望有更熟练的人能纠正我的错误

我在这里使用转换工具: 要转换此处的某些代码,请执行以下操作:

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

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

1:线路

<System.Runtime.CompilerServices.Extension()> _
    Public Shared Function Clone(entityObject As EntityObject) As EntityObject
Private Shared ReadOnly _tracking As New List()
“as var”部分标记为未定义;我不完全确定“as var”是什么意思,我可以删除它并允许编译器推断类型吗

3:这行代码中有一个错误:

Dim t = GetType(EntityCollection(Of )).MakeGenericType(New () {[property].PropertyType.GetGenericArguments()(0)})
在“New”后面的“(“New”表示预期的类型,我不知道该如何理解这条线,因此如何修复它,有人能澄清一下吗

4:那条线

<System.Runtime.CompilerServices.Extension()> _
    Public Shared Function Clone(entityObject As EntityObject) As EntityObject
Private Shared ReadOnly _tracking As New List()
通知我System.Collections.Generic.List(Of T)的类型参数太少。这是因为C#和VB之间存在一些差异吗

非常感谢你的建议

>P>看看VB中的扩展方法是如何工作的。如果有很多扩展方法,那么手动转换它们可能是乏味的。也许你应该考虑把它们留在C中,因为代码编译成相同的中间语言。

  • var
    表示编译器推断类型

  • 在C#中,您可以说'new[]{1,2,3},编译器将根据元素为您推断数组的类型,但我不知道这在VB中是否有效

  • 必须将类型放在括号中才能创建正确的泛型类型。类似于
    newlist(string)

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

    但我还是要试着猜一下

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

  • 在C#中,将变量
    声明为var
    是一种方法。VB.NET中的等效方法是在项目的属性中启用
    选项Infer
    。您需要删除
    作为var
    声明,然后编译器将自动推断变量的类型,就像在C#中一样

  • 我不知道这行代码打算做什么,因为您没有用C#显示原始工作代码,但您需要删除
    New
    并更改声明数组的方式:

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

    Private Shared ReadOnly _tracking As New List(Of Integer)
    
  • 对于#3,
    MakeGenericType
    方法需要一个变量数组
    Type
    。您可以使用
    Dim t=GetType(EntityCollection(of)).MakeGenericType([property].PropertyType.GetGenericArguments()(0))


    对于#4,我也无法想象它是如何在C语言中编译的。然而,从完整的源代码看,它似乎是
    Private Shared ReadOnly(私有共享只读#跟踪)的新列表(自引用跟踪)
    是正确的。

    感谢您的回复。我在我的原始帖子中提供了C#source的完整链接,又在这里:它是180行长的主要代码块。我必须出去,但一回来就会查看您的建议。非常感谢这些答案,这帮助我完整地编译了代码。非常感谢谢谢。谢谢你的回复。我回来后会给你反馈。再次感谢你的评论,代码现在已经编译好了。@TripleAntigen:我找到了原件(我想我得到了你的答案——请看我的编辑),但您应该发布有问题的确切行。您不能期望我们在没有给出提示的情况下筛选数百行代码。太好了,两个建议都很有帮助。再次感谢。