[英]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.