2012-06-27 14 views
7

otrzymuję błąd:„string []” nie zawiera definicji „Obsada”

'string[]' does not contain a definition for 'Cast' and no extension method 'Cast' accepting a first argument of type 'string[]' could be found (are you missing a using directive or an assembly reference?)

na następujący fragment kodu:

return mNames.Cast().ToArray(); 

Co używając dyrektywy lub montaż referencyjnej czy potrzebuję? Jak mogę się dowiedzieć takich rzeczy?

Jestem noobem w C# i .NET, po prostu kopiuję kod, aby wykonać pracę, więc nie bądź dla mnie zbyt techniczny.

+6

jeśli mNames jest tablicą dlaczego spróbować oddać go do tablicy? –

+0

Jakim typem jest 'mNames'? –

+4

['Enumerable.Cast'] (http://msdn.microsoft.com/en-us/library/bb341406.aspx#Y1254) rzuca elementy' IEnumerable' do ** określonego ** typu, ale ty nie określiłem typu. –

Odpowiedz

18

(1) Upewnij się, że pracują nad C# 3.0+

(2) Upewnij się, że kod zawiera:

using System.Linq; 

(3) .Cast to metoda rodzajowa, trzeba określić parametr typ tak:

return mNames.Cast<AnotherType>().ToArray(); 
+0

To zrobione sztuczkę - dzięki - bardzo za skopiowanie kodu :-) – Graham

+0

@Graham - więc co było "AnotherType" na końcu? –

+0

AnotherType był obiektem na końcu – Graham

5

to zwykle dzieje się, gdy tracisz using System.Linq; w górnej części pliku.

Musisz również używać programu .NET 3.5 lub nowszego, aby działał. System.Linq znajduje się w zespole System.Core.dll, który jest domyślnie dołączany do projektów korzystających z .NET 3.5 lub nowszego.

EDIT

Przy bliższym zbadaniu, że kod nie będzie działać, jak napisane, ponieważ metoda Enumerable.Cast() jest nazwą rodzajową, i wymaga, aby przejść w rodzaju, że rzucają się: na przykład mNames.Cast<object>().ToArray();

2

Zazwyczaj wywołuje się metodę rozszerzającą Cast<T>() z argumentem typu, takim jak mNames.Cast<SomeType>().

W każdym razie, mNames wydaje się już być string[], więc do czego chcesz go przesłać? Przesyłanie do object nie będzie konieczne, ponieważ object[] może być przypisany od string[].

+0

Może z jakiegoś powodu zamierzasz upchnąć obiekt do obiektu? –

+0

@BennorMcCarthy Nie trzeba. 'object []' można przypisać z 'string []'. – Botz3000

+0

Tak, masz rację. Nie jestem pewien, co to jest, ponieważ staram się myśleć o czymkolwiek, co można rzucić ciąg do używania 'Enumerable.Cast()' inny niż obiekt. –

2

Nawet jeśli nie użyjesz jawnie "Cast" ten błąd kompilacji również pojawi się, jeśli użyjesz wyrażeń Linq i zapomnisz "using System.Linq;"

Powiązane problemy