如何通过vb.net中的列表/数组进行审核,并保留当前项目的计数,而不必声明显式的计数器变量?
我想要达到的结果如下。
dim i as integer = 0 'evil counter variable
dim arr() as string = {"a","b","c","d","e"}
for each item in arr
console.writeline("Item """ & item & """ is index " & i)
i+=1
next
无需在自己的行上声明“i”
Python有一种速记方式,如下所示。
arr=["a","b","c","d","e"]
for i, item in enumerate(arr):
print("Item """ + item + """ is index " + str(i))
vb.net中的类似实现将是理想的。
修改的
代码的重要部分是枚举。不是印刷价值。
答案 0 :(得分:0)
它不如Python方式好,但这可以按照您的要求进行:
dim arr() as string = {"a","b","c","d","e"}
for i as integer = 0 to arr.length - 1
console.writeline("Item """ & arr(i) & """ is index " & i)
next
同样,不是那么干净,但它可以根据需要进行:)
答案 1 :(得分:0)
Dim arr() As String = {"a", "b", "c", "d", "e"}
For i = 0 To arr.GetUpperBound(0)
Debug.Print($"Item {arr(i)} is index {i}")
Next
答案 2 :(得分:0)
作为替代方案,您可以在Linq private void button1_Click(object sender, EventArgs e)
{
string path = "C:\\temp\\Accounts.xml";
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlElement root = doc.CreateElement("Login");
XmlElement user = doc.CreateElement("user");
user.InnerText = textBox1.Text;
root.AppendChild(user);
doc.DocumentElement.AppendChild(root);
doc.Save(path);
MessageBox.Show("Created SuccesFully!");
}
private void button2_Click(object sender, EventArgs e)
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load("C:\\temp\\Accounts.xml");
foreach (XmlNode person in xdoc.SelectNodes("/Login"))
{
MessageBox.Show(person["user"].InnerText);
}
}
上使用string.Join()
:
Select()
答案 3 :(得分:0)
如果没有Reflection hack,可能的解决方案列表就不会完整,所以让我们去老学校并使用一个枚举器
Dim arr() As String = {"a", "b", "c", "d", "e"}
Dim enumer As IEnumerator = arr.GetEnumerator
Dim fi As Reflection.FieldInfo = enumer.GetType.GetField("_index", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)
While enumer.MoveNext
Dim item As String = DirectCast(enumer.Current, String)
Console.WriteLine($"item: {item} is at index: {fi.GetValue(enumer)}")
End While
需要一点解释。 arr.GetEnumerator
会返回SZArrayEnumerator。此枚举器使用私有字段_index
来跟踪枚举器返回的项的数组索引。该代码使用反射来访问_index
的值。
由于这不是通用的枚举器,Current
属性返回的类型为System.Object
,需要转换回String
。