9

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ディレクティブまたはアセンブリ参照がありませんか?)」というエラーが表示されます。

Listを使用するには、System.Collections.Genericへのusingディレクティブが実際に必要であることは知っていますが、その理由はわかりません。また、関数宣言で同じエラーが発生しない理由もわかりませんが、returnステートメントでのみ発生します。

私は誰かがこれを説明したり、それを説明しているtechnetページを紹介してくれることを望んでいました。私は周りを検索しましたが、この概念を説明するものは何も見つかりません。

編集:ただ注意するために、問題は実際には、システム内のコレクションを参照できる例のように、サブ名前空間の参照に関するものです。

4

3 に答える 3

5

これは、VB.Netが部分的な名前空間をサポートしているためです。C#はそうではありません。

Visual Basicでは、システムはデフォルトでインポートされ、子の名前空間は自動的に解決されます。

この記事で詳細をお読みください。

VB.NetとC#、ラウンド2:部分的な名前空間

于 2009-08-22T06:01:32.640 に答える
5

usingC#のディレクティブはこれを許可しません

名前空間を指定せずに名前空間の型を使用するためのusingディレクティブを作成します。usingディレクティブは、指定した名前空間にネストされている名前空間へのアクセスを許可しません。

ただし、VB.NETは、次のステートメントでやや近い動作をサポートしています。Imports

Importsステートメントによって使用可能になる要素の範囲は、Importsステートメントを使用するときの具体性によって異なります。たとえば、名前空間のみが指定されている場合、その名前空間のすべての一意の名前のメンバー、およびその名前空間内のモジュールのメンバーは、修飾なしで使用できます。名前空間とその名前空間の要素の名前の両方が指定されている場合、その要素のメンバーのみが修飾なしで使用可能です。

参照SO質問

于 2009-08-22T06:07:30.817 に答える
0

System.Collections.Generic.Listと言うことができます。それはうまくいくでしょう。

システム部分を省略せずに、リスト全体を提供する必要があると思います。

また、List(Of string)と同様に、Listのように文字列でテンプレート化する必要があります。

于 2009-08-22T06:01:44.230 に答える