因为我是 C# 菜鸟,所以这里有任何帮助。以下代码工作正常并返回 1 个字符串 ViewState2。我希望它返回一个 ViewState2 和 EventValidation2 数组,以便稍后可以对其进行操作。我如何将下面的代码转换为返回数组?
public string get_status(string local_fname)
{
var dts_doc = new HtmlAgilityPack.HtmlDocument();
dts_doc.Load(local_fname);
//Pull the values
var ViewState = dts_doc.DocumentNode.SelectSingleNode("/html[1]/body[1]/div[1]/input[4]/@value[1]");
var EventValidation = dts_doc.DocumentNode.SelectSingleNode("/html[1]/body[1]/div[2]/input[1]/@value[1]");
string ViewState2 = ViewState.Attributes[3].Value;
string EventValidation2 = EventValidation.Attributes[3].Value;
//Display the values
//System.Console.WriteLine(ViewState.Attributes[3].Value);
//System.Console.WriteLine(EventValidation.Attributes[3].Value);
//System.Console.ReadKey();
return ViewState2;
}
最佳答案
不要使用数组,而是使用类。这样做,您不必记住每个元素的含义。
public class Status
{
public string ViewState {get; set;}
public string EventValidation {get; set;}
}
using System;
using HtmlAgilityPack;
[...]
public Status GetStatus(string localFileName)
{
var dtsDoc = new HtmlDocument();
dtsDoc.Load(localFileName);
//Pull the values
var viewStateNode = dtsDoc.DocumentNode.SelectSingleNode("/html[1]/body[1]/div[1]/input[4]/@value[1]");
var eventValidationNode = dtsDoc.DocumentNode.SelectSingleNode("/html[1]/body[1]/div[2]/input[1]/@value[1]");
string viewState = viewStateNode.Attributes[3].Value;
string eventValidation = eventValidationNode.Attributes[3].Value;
//Display the values
//Console.WriteLine(viewState);
//Console.WriteLine(eventValidation);
//Console.ReadKey();
return new Status
{
ViewState = viewState,
EventValidation = eventValidation
}
}
此外,您应该阅读 C# 语言中的编码指南和命名约定,using
语句也可能很有趣。我已经纠正了一些“错误”,但可能没有全部纠正。另外,我重命名了几个变量,使它们的内容更清晰。您可能还想考虑仅在循环中使用 var
关键字,同时使用 LINQ(或一般的匿名类型)或使用非常长的类名。写出类型名称可以大大提高可读性。
关于C# 数组转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4001119/