在VB.Net中你可以做一些类似下面的事情而没有任何问题...只是忽略这是一个非常无用的类的事实: - )
Imports System
Public Class Class1
Public Shared Function ArrayToList(ByVal _array() As String) As Collections.Generic.List(Of String)
Return New Collections.Generic.List(Of String)(_array)
End Function
End Class
但是如果你在C#中做同样的事情......
using System;
public class Class1
{
public static Collections.Generic.List ArrayToList(string[] _array)
{
return new Collections.Generic.List(_array);
}
}
您将在“Collections.Generic.List”返回的行上收到错误,说“找不到类型或命名空间名称'Collections'(您是否缺少using指令或程序集引用?)”
我知道您必须实际使用System.Collections.Generic的using指令才能使用List但我不知道为什么。我也不明白为什么我在函数声明中没有得到相同的错误,只是在return语句中。
我希望有人可以解释这一点,甚至可以将我推荐给解释它的technet页面。我四处寻找,但找不到任何解释这个概念的东西。
编辑:请注意,问题实际上是关于子命名空间的引用,例如在示例中能够引用系统中的集合。
答案 0 :(得分:5)
这是因为 VB.Net支持部分名称空间; C#没有。
使用Visual Basic导入系统 默认情况下,子命名空间是 自动解决。
在本文中阅读更多内容。
答案 1 :(得分:5)
using
指令:
创建一个using指令来使用 命令空间中的类型而不必 指定命名空间。一个使用 指令不允许您访问 嵌套在的任何名称空间 您指定的命名空间。
VB.NET,supports somewhat closer行为与Imports
声明:
要素的范围 可通过Imports声明获得 取决于你的具体时间 使用Imports语句。对于 例如,如果只有命名空间 指定的,所有唯一命名的成员 该命名空间和成员 该命名空间中的模块是 没有资格。如果 命名空间和名称 该命名空间的元素是 指定,只有那个成员 元素可用没有 资格。
答案 2 :(得分:0)
你可以说System.Collections.Generic.List。那会有用。
我认为您需要提供整个列表,而不是省略系统部分。
此外,您需要使用字符串对其进行模板设置,如List中的List(Of string)