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

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

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

最佳答案
在C#does not allow中使用指令:

Create a using directive to use the
types in a namespace without having to
specify the namespace. A using
directive does not give you access to
any namespaces that are nested in the
namespace you specify.

但是,VB.NET使用Imports语句执行supports somewhat closer行为:

The scope of the elements made
available by an Imports statement
depends on how specific you are when
using the Imports statement. For
example, if only a namespace is
specified, all uniquely named members
of that namespace, and members of
modules within that namespace, are
available without qualification. If
both a namespace and the name of an
element of that namespace are
specified, only the members of that
element are available without
qualification.

Reference SO Question

转载注明原文:C#与VB.Net中的命名空间引用 - 代码日志