2012-06-27 44 views
7

我收到錯誤的定義:「字符串[]」不包含「演員」

'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?)

在下面的一段代碼:

return mNames.Cast().ToArray(); 

什麼using指令或程序集引用我需要? 我如何找出這些東西?我是C#和.NET的noob,我只是複製代碼來完成一項工作,所以不要太過於技術上的問題。

+6

如果mNames是一個數組,爲什麼你試圖將其轉換爲一個數組? –

+0

'mNames'是什麼類型? –

+4

['Enumerable.Cast'](http://msdn.microsoft.com/en-us/library/bb341406.aspx#Y1254)將「IEnumerable」的元素轉換爲**指定的**類型,但是您沒有指定類型。 –

回答

18

(1)確保你在C#的工作3.0+

(2)確保您的代碼包含:

using System.Linq; 

(3).Cast是一個通用的方法,你需要指定類型參數,如下所示:

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

這就完成了 - 謝謝 - 這麼複製代碼:-) – Graham

+0

@Graham - 那麼到底是什麼'AnotherType'? –

+0

AnotherType最後是對象 – Graham

5

這通常發生在當您在文件頂部缺少using System.Linq;時。

您還需要使用.NET 3.5或更高版本才能正常工作。 System.Linq位於程序集System.Core.dll中,默認情況下包含在使用.NET 3.5或更高版本的項目中。

編輯

在仔細檢查,該代碼將永遠書面工作,因爲Enumerable.Cast()方法是通用的,需要你在你所鑄造的類型來傳遞:如mNames.Cast<object>().ToArray();

2

通常,您可以使用類型參數調用Cast<T>()擴展方法,如mNames.Cast<SomeType>()

無論如何,mNames已經好像是string[],那麼您想要將它投射到什麼位置? 鑄造到object將不是必要的,因爲object[]可以從string[]分配。

+0

可能因爲某種原因打算向上反對對象? –

+0

@BennorMcCarthy不需要。 'object []'可以從'string []'中賦值。 – Botz3000

+0

是的,你是對的。不知道這一點會是什麼,因爲我很難想出任何可以使用'Enumerable.Cast()'而不是對象來投射字符串的東西。 –

2

即使你沒有明確地使用「Cast」,如果你使用Linq表達式並忘記了「using System.Linq;」,這個編譯錯誤也會出現。