【问题标题】:Namespace references in C# vs. VB.NetC# 与 VB.Net 中的命名空间引用
【发布时间】:2010-11-21 20:43:33
【问题描述】:

在 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 语句中。

我希望有人可以解释这一点,或者甚至将我引至解释它的技术网页面。我四处搜索,但找不到任何解释这个概念的东西。

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

【问题讨论】:

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


【解决方案1】:

C# 中的using 指令does not allow this:

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

然而,VB.NET 的 supports somewhat closer 行为与 Imports 语句:

制作的元素范围 可通过 Imports 声明获得 取决于你的具体程度 使用 Imports 语句。为了 例如,如果只有一个命名空间 指定,所有唯一命名的成员 该命名空间的成员,以及 该命名空间内的模块是 无资格可用。如果 命名空间和名称 该命名空间的元素是 指定,只有那个成员 元素不可用 资格。

Reference SO Question

【讨论】:

  • 这太棒了,不知道我是怎么错过这篇文章的,我猜我的搜索字符串不够接近。谢谢!
【解决方案2】:

你可以说 System.Collections.Generic.List。那会工作的。

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

此外,您还需要使用类似于 List(Of string) 的 List 中的字符串对其进行模板化

【讨论】:

    【解决方案3】:

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

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

    阅读本文了解更多信息。

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

    【讨论】:

    • 那是一篇很棒的文章。我认为第三篇文章在这里最直接地回答了这个问题,但这非常有帮助,所以我给出了分数。谢谢!
    • @rahul,部分命名空间文章的链接现已损坏。
    猜你喜欢
    • 2011-12-30
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多