2009-08-22 10 views
8

In VB.Net können Sie so etwas wie die folgenden ohne Probleme tun ... einfach ignorieren die Tatsache, dass dies eine ziemlich nutzlose Klasse ist :-)Namespace Referenzen in C# vs. 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 

Allerdings, wenn Sie die gleiche Sache in C# tun ...


using System; 

public class Class1 
{ 
    public static Collections.Generic.List ArrayToList(string[] _array) 
    { 
     return new Collections.Generic.List(_array); 
    } 
} 

Sie einen Fehler auf der Linie mit der Rückkehr auf „Collections.Generic.List“ sagen: „der Typ oder Namespace-Name‚Collections‘bekommen konnte nicht gefunden werden (fehlt Ihnen eine Verwendungsrichtlinie oder eine Baugruppenreferenz?) "

Ich weiß, dass Sie tatsächlich eine using-Direktive zu System.Collections.Generic verwenden müssen, um Liste zu verwenden, aber ich weiß nicht warum. Ich verstehe auch nicht, warum ich nicht den gleichen Fehler in der Funktionsdeklaration bekomme, sondern nur in der return-Anweisung.

Ich hatte gehofft, jemand kann dies erklären oder mich sogar auf eine Technet-Seite verweisen, die es erklärt. Ich habe gesucht, kann aber nichts finden, was dieses Konzept erklärt.

Edit: Nur um festzustellen, die Frage ist wirklich über die Referenzierung eines Sub-Namespace wie in dem Beispiel in der Lage, Sammlungen innerhalb System verweisen.

+1

Referenz: http://stackoverflow.com/questions/768905/namespace-and-sub-namespaces – Kirtan

Antwort

4

using Richtlinie in C# does not allow dies:

erstellen using-Direktive die Typen verwenden in einem Namespace ohne den Namespace angeben. Eine Verwendung der Direktive gibt Ihnen keinen Zugriff auf alle Namespaces, die im angegebenen Namespace verschachtelt sind.

VB.NET, aber supports somewhat closer Verhalten mit Imports Aussage:

Der Umfang der Elemente verfügbar durch eine Anweisung Imports gemacht hängt davon ab, wie bestimmte Sie sind, wenn die Imports-Anweisung.Für Beispiel, wenn nur ein Namespace angegeben ist, sind alle eindeutig benannten Mitglieder dieses Namespaces und Mitglieder von Module in diesem Namespace ohne Qualifikation verfügbar. Wenn sowohl ein Namespace als auch der Name eines Elements dieses Namespaces angegeben sind, sind nur die Mitglieder dieses Elements ohne die Qualifizierung verfügbar.

Reference SO Question

+0

Das ist großartig, ich bin mir nicht sicher, wie ich diesen Post verpasst habe, ich denke, mein Suchbegriff war einfach nicht nahe genug. Vielen Dank! – tcnolan

4

Dies liegt daran, VB.Net unterstützt teilweise Namespaces; C# nicht.

Mit Visual Basic, System standardmäßig und Kind Namensraum importiert werden automatisch aufgelöst.

Lesen Sie mehr in diesem Artikel.

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

+1

Das ist ein geiler Artikel. Der dritte Post, denke ich, beantwortet die Frage am direktesten hier, aber das war sehr hilfreich, also gab ich die Punkte. Vielen Dank! – tcnolan

+0

@rahul, der Link zu dem Teil-Namespaces-Artikel ist jetzt unterbrochen. – CokoBWare

0

können Sie System.Collections.Generic.List sagen. das würde funktionieren.

Ich denke, Sie müssen die gesamte Liste geben und nicht den Systemteil auslassen.

ALso müssen Sie es mit einer Schnur an Template wie in Liste ähnlich der List (Of String)