将c#应用程序转换为VB

将c#应用程序转换为VB,c#,vb.net,code-translation,C#,Vb.net,Code Translation,我正在将一个C#应用程序转换为VB,但对由此产生的一些错误不确定 在C#我有- 转换为- Dim quotesInvoker = New Reuters_Downloader.HttpSample.Invokers.QuotesInvoker(New () {"EUR=X", "JPY=X"}) Public Class QuotesInvoker Implements IInvoker(Of RetrieveItem_Request_3, ItemResponse_Shor

我正在将一个C#应用程序转换为VB,但对由此产生的一些错误不确定

在C#我有-

转换为-

 Dim quotesInvoker = New Reuters_Downloader.HttpSample.Invokers.QuotesInvoker(New () {"EUR=X", "JPY=X"})
    Public Class QuotesInvoker
    Implements IInvoker(Of RetrieveItem_Request_3, ItemResponse_Short_Or_Full())
    Private ReadOnly rics As String()

    Public Sub New(rics As String())
        Me.rics = rics
    End Sub

    Public Function Invoke(authorization As AuthorizationType, request As RetrieveItem_Request_3) As ItemResponse_Short_Or_Full()
        Dim proxy = New Quotes_1Client()
        Dim response As ItemResponse_Short_Or_Full() = Nothing
        proxy.RetrieveItem_3(Nothing, authorization, request, response)
        Return response
    End Function

    Public Function CreateRequest() As RetrieveItem_Request_3
        Dim retval = New RetrieveItem_Request_3()
        retval.TrimResponse = False

        Dim request = New ItemRequest_2(0) {}
        Dim request0 = New ItemRequest_2()
        request0.Fields = ""
        Dim keys = New List(Of InstrumentKey_2)()
        For Each ric In rics
            keys.Add(New InstrumentKey_2() With {  _
                Key .Name = ric, _
                Key .NameType = "RIC" _
            })
        Next
        request0.RequestKey = keys.ToArray()
        request0.ExpandChains = True
        request0.Scope = Scope.All
        request(0) = request0

        retval.ItemRequest = request
        Return retval
    End Function
End Class
但是,New()有一个“Type Expected”错误 如果我修改代码为-

 Dim quotesInvoker = New Reuters_Downloader.HttpSample.Invokers.QuotesInvoker(CType(New Object() {"EUR=X", "JPY=X"}, String()))
问题解决了,但我不知道这是否是一个好的解决办法。有什么评论吗

有了这个,我们就有了这个C#QuotesInvoker代码-

 public class QuotesInvoker : IInvoker<RetrieveItem_Request_3, ItemResponse_Short_Or_Full[]>
{
    private readonly string[] rics;

    public QuotesInvoker(string[] rics)
    {
        this.rics = rics;
    }

    public ItemResponse_Short_Or_Full[] Invoke(AuthorizationType authorization, RetrieveItem_Request_3 request)
    {
        var proxy = new Quotes_1Client();
        ItemResponse_Short_Or_Full[] response;
        proxy.RetrieveItem_3(null, authorization, request, out response);
        return response;
    }

    public RetrieveItem_Request_3 CreateRequest()
    {
        var retval = new RetrieveItem_Request_3();
        retval.TrimResponse = false;

        var request = new ItemRequest_2[1];
        var request0 = new ItemRequest_2();
        request0.Fields = "";
        var keys = new List<InstrumentKey_2>();
        foreach(var ric in rics)
        {
            keys.Add(new InstrumentKey_2
            {
                Name = ric,
                NameType = "RIC"
            });
        }
        request0.RequestKey = keys.ToArray();
        request0.ExpandChains = true;
        request0.Scope = Scope.All;
        request[0] = request0;

        retval.ItemRequest = request;
        return retval;
    }
}
这在接口“IInvoker”(属于ThomsonReutersKnowledgedDirect.RetrieveItem)的“类'QuotesInvoker'必须将'Function CreateRequest()实现为ThomsonReutersKnowledgedDirect.RetrieveItem'u Request'u 3,ThomsonReutersKnowledgedDirect.ItemResponse'u Short'u或'u Full()”的第2行中产生错误

“RetrieveItem_Request_3”的“无错误”Vb翻译为-

<System.Diagnostics.DebuggerStepThroughAttribute()> _
<System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")> _
<System.ServiceModel.MessageContractAttribute(IsWrapped:=False)> _
Partial Public Class RetrieveItem_3_RequestMessage

    <System.ServiceModel.MessageHeaderAttribute([Namespace]:="http://www.reuters.com/ns/2008/03/01/webservices/rkd/Cache_1")> _
    Public CacheRequest As ThomsonReutersKnowledgeDirect.CacheRequest

    <System.ServiceModel.MessageHeaderAttribute([Namespace]:="http://www.reuters.com/ns/2006/05/01/webservices/rkd/Common_1")> _
    Public Authorization As ThomsonReutersKnowledgeDirect.AuthorizationType

    <System.ServiceModel.MessageBodyMemberAttribute([Namespace]:="http://www.reuters.com/ns/2006/05/01/webservices/rkd/Quotes_1", Order:=0)> _
    Public RetrieveItem_Request_3 As ThomsonReutersKnowledgeDirect.RetrieveItem_Request_3

    Public Sub New()
    End Sub

    Public Sub New(CacheRequest As ThomsonReutersKnowledgeDirect.CacheRequest, Authorization As ThomsonReutersKnowledgeDirect.AuthorizationType, RetrieveItem_Request_3 As ThomsonReutersKnowledgeDirect.RetrieveItem_Request_3)
        Me.CacheRequest = CacheRequest
        Me.Authorization = Authorization
        Me.RetrieveItem_Request_3 = RetrieveItem_Request_3
    End Sub
End Class
_
_
_
部分公共类检索项3请求消息
_
公共CacheRequest作为ThomsonReutersKnowledgedDirect.CacheRequest
_
作为ThomsonReutersKnowledgeDirect.AuthorizationType的公共授权
_
作为ThomsonReutersKnowledgeDirect.RetrieveItem\u请求的公共检索项\u 3
公共分新()
端接头
Public Sub-New(CacheRequest作为thomsonreuterskknowledgedirect.CacheRequest,授权作为thomsonreuterskknowledgedirect.AuthorizationType,RetrieveItem_Request_3作为thomsonreuterskknowledgedirect.RetrieveItem_Request_3)
Me.CacheRequest=CacheRequest
授权=授权
Me.RetrieveItem\u Request\u 3=RetrieveItem\u Request\u 3
端接头
末级
我对此感到迷茫,因此,如果您能帮助我解决由此产生的翻译错误,我将不胜感激。
谢谢回答第一个问题:是的,就是这样。VB编译器需要该语法的数组类型。您只需修改:

Dim quotesInvoker = New Reuters_Downloader.HttpSample.Invokers.QuotesInvoker(New String() {"EUR=X", "JPY=X"})
至于第二个错误:C#编译器支持隐式实现接口成员,而VB编译器不支持。因此,在VB中,您应该始终显式指定要实现的成员:

Public Function CreateRequest() As RetrieveItem_Request_3 _
    Implements IInvoker(Of ThomsonReutersKnowledgeDirect.RetrieveItem_Request_3, ThomsonReutersKnowledgeDirect.ItemResponse_Short_Or_Full()).CreateRequest

对于第一期,您可以使用:

Dim quotesInvoker = New QuotesInvoker( { "EUR=X", "JPY=X" })

对于第二个问题,只需添加必要的“Implements”子句(在方法头的末尾键入“Implements”,VB将为您提供选项)。如果转换器没有接口代码或程序集引用来查找接口方法,它将不会为您添加这些方法。

将c#转换为vb?我为您感到抱歉,您为什么要这样做?更严肃的是,为什么不编辑您的标题,使其更具体地说明您的要求。太棒了!这帮助我解决了一个问题“我会纠正我的其他错误的。@Dave Doknjas,也谢谢你。”
Dim quotesInvoker = New QuotesInvoker( { "EUR=X", "JPY=X" })