2009-08-22 17 views
8

w VB.NET można zrobić coś jak następuje bez żadnych problemów ... po prostu zignorować faktu, że jest to całkiem bezużyteczny klasa :-)odniesienia nazw w 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 

jeśli jednak zrobić to samo w C# ...


using System; 

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

dostaniesz błąd na linii z powrotem na „Collections.Generic.List”, mówiąc „typu lub obszaru nazwa«Collections»nie może można znaleźć (czy brakuje instrukcji użycia lub odniesienia do zespołu?) "

Wiem, że musisz faktycznie używać dyrektywy System.Collections.Generic do używania listy, ale nie wiem, , dlaczego. Nie rozumiem również, dlaczego nie dostaję tego samego błędu w deklaracji funkcji, ale tylko w oświadczeniu zwrotnym.

Miałem nadzieję, że ktoś może to wyjaśnić lub nawet odesłać mnie do strony technicznej, która to wyjaśnia. Szukałem w pobliżu, ale nie mogę znaleźć niczego, co wyjaśniałoby tę koncepcję.

Edycja: Należy zauważyć, że chodzi tu o odniesienie do przestrzeni nazw podrzędnych, tak jak w przykładzie można odwoływać się do kolekcji w systemie.

+1

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

Odpowiedz

4

using dyrektywy w C# does not allow to:

Tworzenie using dyrektywa używania typy w przestrzeni nazw bez konieczności określania przestrzeni nazw. Korzystanie z dyrektywy nie daje dostępu do żadnych obszarów nazw, które są zagnieżdżone w określonym obszarze nazw .

VB.NET jednak supports somewhat closer zachowanie z Imports stwierdzeniem:

Zakres elementy wykonane dostępne przez instrukcję Imports zależy od specyficznych jesteś kiedy za pomocą instrukcji import.W przypadku przykładu , jeśli określona jest tylko przestrzeń nazw , wszystkie jednoznacznie nazwane elementy tej przestrzeni nazw i członkowie modułów w obrębie tej przestrzeni nazw są dostępne bez kwalifikacji w postaci . Jeśli zarówno przestrzeń nazw, jak i nazwa elementu tego obszaru nazw są określone, tylko elementy tego elementu są dostępne bez kwalifikacji .

Reference SO Question

+0

To jest niesamowite, nie wiem, jak bardzo tęskniłem za tym postem. Przypuszczam, że mój ciąg wyszukiwania nie był wystarczająco blisko. Dzięki! – tcnolan

4

Dzieje się tak, ponieważ VB.Net obsługuje częściowe przestrzenie nazw; C# nie.

Visual Basic, System jest importowany domyślnie i dzieci nazw są automatycznie rozwiązane.

Przeczytaj więcej w tym artykule.

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

+1

To niesamowite artykuł. Trzeci post, który myślę, odpowiada na pytanie najbardziej bezpośrednio tutaj, ale to było bardzo pomocne, więc dałem punkty. Dzięki! – tcnolan

+0

@rahul, łącze do artykułu częściowych nazw jest teraz zepsute. – CokoBWare

0

można powiedzieć System.Collections.Generic.List. to powinno działać.

Myślę, że trzeba podać całą listę i nie pominąć części systemowej.

również trzeba będzie szablon go sznurkiem jak w Liście podobny do listy (string)