C#与VB.Net中的命名空间引用

时间:2009-08-22 05:51:33

标签: c# vb.net using using-directives

在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页面。我四处寻找,但找不到任何解释这个概念的东西。

编辑:请注意,问题实际上是关于子命名空间的引用,例如在示例中能够引用系统中的集合。

3 个答案:

答案 0 :(得分:5)

这是因为 VB.Net支持部分名称空间; C#没有。

  

使用Visual Basic导入系统   默认情况下,子命名空间是   自动解决。

在本文中阅读更多内容。

VB.Net vs C#, Round 2: Partial Namespaces

答案 1 :(得分:5)

C#does not allow中的

using指令:

  

创建一个using指令来使用   命令空间中的类型而不必   指定命名空间。一个使用   指令不允许您访问   嵌套在的任何名称空间   您指定的命名空间。

VB.NET,supports somewhat closer行为与Imports声明:

  

要素的范围   可通过Imports声明获得   取决于你的具体时间   使用Imports语句。对于   例如,如果只有命名空间   指定的,所有唯一命名的成员   该命名空间和成员   该命名空间中的模块是   没有资格。如果   命名空间和名称   该命名空间的元素是   指定,只有那个成员   元素可用没有   资格。

Reference SO Question

答案 2 :(得分:0)

你可以说System.Collections.Generic.List。那会有用。

我认为您需要提供整个列表,而不是省略系统部分。

此外,您需要使用字符串对其进行模板设置,如List中的List(Of string)