繁体   English   中英

如何将模块和函数从 VB.NET 转换为 C#

[英]How to convert Module & Function from VB.NET to c#

我是 C# 的新手,我之前在 VB.NET 中编写了代码,但我正在尝试使用 C# 重新开发我的程序,并作为学习 C# 的一课。 我尝试了很长时间,但仍然无法从 VB.NET 正确转换为 c#,谁能帮我转换一下,因为我会更容易理解 c#,谢谢!

这是我来自 VB.NET 的代码

Module GetStaffList

Dim Url As String
Dim CorpID As String
Dim Secret As String
Const ErrCode As String = """errcode"":0,""errmsg"":""ok"""

Function Token(CorpID As String, Secret As String) As String

    CorpID = "wwe1f80304633b3"
    Secret = "Ev7_oVNNbTpzkfcZ_QhX9l0VjZnAQ"

    Dim http = CreateObject("MSXML2.ServerXMLHTTP")
    Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" & CorpID & "&corpsecret=" & Secret
    http.Open("get", Url, False)
    http.send()

    If http.Status = 200 Then
        Token = http.responseText
    End If

    If InStr(Token, "access_token") > 1 Then
        Token = Split(Token, ",")(2)
        Token = Split(Token, ":")(1)
        Token = Replace(Token, """", "")
        MainPage.TxtToken.Text = Token
    Else
        Token = ""
    End If

End Function

下面是我尝试转换为 c# 但仍然很难做到的

namespace SC_System

{ class MSG { const string ErrCode = "\\"errcode\\":0,\\"errmsg\\":\\"ok\\"";

    public void Token(string CorpID, string Secret)
    {
        var http = CreateObject("MSXML2.ServerXMLHTTP");
        string Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + PDC.CorpID + "&corpsecret=" + PDC.Secret +"";
        HttpWebRequest GetUrl = (HttpWebRequest)WebRequest.Create(Url);
        HttpWebResponse ResponseUrl = (HttpWebResponse)GetUrl.GetResponse();
        if (ResponseUrl.StatusCode == HttpStatusCode.OK)
        {
            Console.WriteLine(ResponseUrl.StatusDescription);
            ResponseUrl.Close();
        }

    }

    private object CreateObject(string v)
    {
        throw new NotImplementedException();
    }
}

}

在 VB 中, Function返回一些值。 在您的代码中,它返回一个string

  • Function Token(CorpID As String, Secret As String) As String

    变成

    string Token(string CorpID, string Secret){ // do something...and then return "some string value"; }

    并且需要return一些字符串值。 函数名称不会推断出与返回值同名的变量 ( Token )

  • Sub不返回任何内容,因此:

    Sub Token(CorpID As String, Secret As String)

    在 C# 中变为void

    void Token(string CorpID, string Secret)

希望应该让你去...

这翻译了原始 VB 的工作部分:

internal static class GetStaffList
{
    //this doesn't seem to be used right now
    internal const string ErrCode = "\"errcode\":0,\"errmsg\":\"ok\"";

    internal static void Token(string CorpID, string Secret)
    {
        CorpID = CorpID ?? "wwe1f80304633b3";
        Secret = Secret ?? "Ev7_oVNNbTpzkfcZ_QhX9l0VjZnAQ";

        string token;    
        using (var wc = new WebClient())
        {
            token = wc.DownloadString($"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CorpID}&corpsecret={Secret}");
        }
        if (token.Contains("access_token"))
        {
            token = token.Split(",")[2].Split(":")[1].Replace("\"", "");
            MainPage.TxtToken.Text = token;
        }
        else 
        {
            token = ""; 
        }
    }
}

但是您最好实际返回一个值,而不是更新 UI,正如 VB 方法中所暗示的那样:

internal static string Token(string CorpID, string Secret)
{
    CorpID = CorpID ?? "wwe1f80304633b3";
    Secret = Secret ?? "Ev7_oVNNbTpzkfcZ_QhX9l0VjZnAQ";

    string token;    
    using (var wc = new WebClient())
    {
        token = wc.DownloadString($"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CorpID}&corpsecret={Secret}");
    }
    if (token.Contains("access_token"))
    {
        return token.Split(",")[2].Split(":")[1].Replace("\"", "");
    }
    return "";
}

然后你会这样称呼它:

string token = GetStaffList.Token(null, null);
if (!string.IsNullOrEmpty(token))
{
    MainPage.TxtToken.Text = token;
}

永远不要让您的实用程序方法或类直接更新 UI。

同样,最好这样编写 VB:

Public Module GetStaffList

    Const ErrCode As String = """errcode"":0,""errmsg"":""ok"""

    Public Function Token(Optional CorpID As String = Nothing, Optional Secret As String = Nothing) As String

        CorpID = If(CorpID,"wwe1f80304633b3")
        Secret = If(Secret,"Ev7_oVNNbTpzkfcZ_QhX9l0VjZnAQ")

        Dim token As String
        Using wc As New WebClient()
            token = wc.DownlaodString(string.Format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}", CorpID, Secret))
        End Using

        If token.Contains("access_token") Then
            Return token.Split(",")(2).Split(":")(1).Replace("""", "")
        End If
        Return ""
    End Function
End Module

最后,您应该考虑使用实际的 JSON 解析器从下载结果中提取您需要的令牌值。 Split()方法因此类问题而臭名昭著,实际上往往比专用解析器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM