以下两种访问属性的方法是否完全相同?

Yur*_*oor 0 c# vb.net

我正在将一个从VB.NET移植到C#的应用程序,并发现我不能.ItemOf在C#中使用,但是如果我没有使用.ItemOf它似乎工作.但是,以下两个片段实际上是在做同样的事情吗?

VB

Public Shared Settings As NameValueCollection
'some code
 Dim key As XmlNode
 For Each key In node.ChildNodes
     MobileConfiguration.Settings.Add(key.Attributes.ItemOf("key").Value, key.Attributes.ItemOf("value").Value)
 Next
'some code
Run Code Online (Sandbox Code Playgroud)

C#

public static NameValueCollection Settings;
//some code
 foreach (XmlNode key in node.ChildNodes)
     MobileConfiguration.Settings.Add(key.Attributes["key"].Value, key.Attributes["value"].Value);     
//some code
Run Code Online (Sandbox Code Playgroud)

Dam*_*ver 6

是的,C#indexer语法相当于VB代码的.ItemOf()调用.如果你查看文档,你可以看到这个ItemOf.如果顶部的语言首选项设置为C#1,则示例如下所示:

using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main(){

    XmlDocument doc = new XmlDocument();
    doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" +
                "<title>Pride And Prejudice</title>" +
                "</book>");      

    //Create an attribute collection. 
    XmlAttributeCollection attrColl = doc.DocumentElement.Attributes;

    Console.WriteLine("Display all the attributes in the collection...\r\n");
    for (int i=0; i < attrColl.Count; i++)
    {
      Console.Write("{0} = ", attrColl[i].Name);
      Console.Write("{0}", attrColl[i].Value);
      Console.WriteLine();
    }           
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您的语言设置设置为VB,您将看到以下示例:

Imports System
Imports System.IO
Imports System.Xml

public class Sample

  public shared sub Main()

    Dim doc as XmlDocument = new XmlDocument()
    doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" & _
                "<title>Pride And Prejudice</title>" & _
                "</book>")      

    'Create an attribute collection.
    Dim attrColl as XmlAttributeCollection = doc.DocumentElement.Attributes

    Console.WriteLine("Display all the attributes in the collection...")
    Dim i as integer
    for i=0  to attrColl.Count-1
      Console.Write("{0} = ", attrColl.ItemOf(i).Name)
      Console.Write("{0}", attrColl.ItemOf(i).Value)
      Console.WriteLine()
    next

  end sub
end class
Run Code Online (Sandbox Code Playgroud)

C#为索引器保留特殊语法,并且ItemOfXmlAttributeCollection该类的索引器.


1我知道很多人还没有在改进过的文档中找到这个: 在此输入图像描述