我运行以下代码段。
Public Shared Sub DisplayDnsConfiguration()
Dim adapters As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces()
Dim adapter As NetworkInterface
For Each adapter In adapters
Dim properties As IPInterfaceProperties = adapter.GetIPProperties()
Console.WriteLine(adapter.Description)
Console.WriteLine(" DNS suffix................................. :{0}", properties.DnsSuffix)
Console.WriteLine(" DNS enabled ............................. : {0}", properties.IsDnsEnabled)
Console.WriteLine(" Dynamically configured DNS .............. : {0}", properties.IsDynamicDnsEnabled)
Next adapter
End Sub 'DisplayDnsConfiguration
我理解最终结果,打印了一些属性。但是我不明白那里的方式。
以下三行是我不理解的:
1. Dim adapters As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces()
2. Dim adapter As NetworkInterface
3. For Each adapter In adapters
关于第1行,为什么是As NetworkInterface(),我理解它是字符串或整数等...但不是NetworkInterface()。然后我假设它使用GetAllNetworkInterfaces()方法返回的数据填充“适配器”。
关于2.与上面相同,但为什么最后不使用()?
关于3.为什么在适配器中使用适配器?它实际上做了什么?我理解它循环通过接口,但是如何?
由于
答案 0 :(得分:2)
1 - 它将“适配器”声明为“NetworkInterface”类型的数组
在vb.net中,数组是用(...)语法声明和索引的,在c#中它是[...],所以字符串数组将是
dim stringArray as string()
c#中的内容看起来像
string[] stringArray;
2 - 这将是每个循环的范围变量,用于引用数组中的对象,因此它本身不是数组
3 - foreach正在说“循环通过适配器数组,对于找到的每个对象,为数组中的当前变量适配器分配当前值,然后运行这段代码,重复直到我们到达数组的末尾”< / p>
答案 1 :(得分:2)
Dim yourIndividualName as SomeType
声明一个名为yourIndividualName
的变量,其类型为SomeType
。与int
相比,String
和NetworkInterface
是相当原始的类型,但声明它们是相同的。
例如:
Dim someText as String
要声明数组(列表),只需将()
添加到类型
Dim severalTexts as String()
回到你的问题:
1:
Dim adapters As NetworkInterface()
声明名为NetworkInterface
的{{1}}列表(实际上是一个数组),但列表为空。然后adapters
填写该列表。
2:
= NetworkInterface.GetAllNetworkInterfaces()
这声明了一个Dim adapter As NetworkInterface
类型的空变量。它后来用于浏览列表。
3:
NetworkInterface
这将获取列表For Each adapter In adapters
' do some stuff
Next adapter
中的第一个元素,将其保存在adapters
中,并在adapter
和For
之间执行操作。当列表中有另一个项目时,Next
会使用下一个项目,将其保存在For
中,依此类推,直到它到达列表adapter
的末尾。在adapters
和For
之间,您可以Next
使用adapter
显示它的一些属性等。
执行相同操作的较短版本:
For Each adapter as NetworkInterface In NetworkInterface.GetAllNetworkInterfaces()
Dim properties As IPInterfaceProperties = adapter.GetIPProperties()
Console.WriteLine(adapter.Description)
Console.WriteLine(" DNS suffix................................. :{0}", properties.DnsSuffix)
Console.WriteLine(" DNS enabled ............................. : {0}", properties.IsDnsEnabled)
Console.WriteLine(" Dynamically configured DNS .............. : {0}", properties.IsDynamicDnsEnabled)
Next adapter
答案 2 :(得分:0)
首先,大多数情况下,你会在这一行中看到第2步和第3步
For each adapter as NetworkInterface in adapters
Next
回答您的疑虑:步骤1是网络接口的集合,而数字2是对象NetworkInterface的局部变量。步骤3使您循环遍历步骤1中集合中存在的所有NetworkInterface。