2012-06-27 36 views
7

Tôi nhận được lỗi:'string []' không chứa một định nghĩa cho 'đúc'

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

trên đoạn mã sau:

return mNames.Cast().ToArray(); 

gì sử dụng chỉ thị hoặc lắp ráp tham khảo tôi cần Làm cách nào để tìm ra những điều như vậy?

Tôi là một noob tại C# và .NET, tôi chỉ đang sao chép mã để hoàn thành công việc, vì vậy đừng quá kỹ thuật với tôi.

+6

nếu mNames là một mảng tại sao bạn cố gắng truyền vào mảng? –

+0

Loại 'mNames' là gì? –

+4

['Enumerable.Cast'] (http://msdn.microsoft.com/en-us/library/bb341406.aspx#Y1254) đưa các phần tử của một' IEnumerable' vào ** ** được chỉ định, nhưng bạn chưa chỉ định loại. –

Trả lời

18

(1) Hãy chắc chắn rằng bạn đang làm việc trên C# 3.0+

(2) Hãy chắc chắn rằng mã của bạn có chứa:

using System.Linq; 

(3) .Cast là một phương pháp chung chung, bạn cần phải xác định nhập thông số, như sau:

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

Điều đó đã hoàn thành mẹo - cảm ơn - rất nhiều cho việc sao chép mã :-) – Graham

+0

@Graham - vậy cuối cùng là 'AnotherType' là gì? –

+0

Loại khác là đối tượng ở cuối – Graham

5

Điều đó thường xảy ra khi bạn thiếu using System.Linq; ở đầu tệp của mình.

Bạn cũng sẽ cần phải sử dụng .NET 3.5 trở lên để ứng dụng hoạt động. System.Linq là trong System.Core.dll lắp ráp, được bao gồm theo mặc định trong các dự án sử dụng .NET 3.5 hoặc cao hơn.

EDIT

On kiểm tra chặt chẽ hơn, mã mà sẽ không bao giờ làm việc như văn bản, bởi vì phương pháp Enumerable.Cast() là chung chung, và đòi hỏi bạn phải vượt qua trong các loại mà bạn đang đúc để: ví dụ: mNames.Cast<object>().ToArray();

2

Thông thường, bạn gọi phương thức mở rộng Cast<T>() với đối số loại, như mNames.Cast<SomeType>().

Dù sao, mNames dường như là string[], vậy bạn muốn truyền nội dung đó đến? Truyền tới object sẽ không cần thiết, bởi vì object[] có thể được chỉ định từ string[].

+0

Có thể có ý định upcast để phản đối vì một lý do nào đó? –

+0

@BennorMcCarthy Không cần. 'object []' có thể gán từ 'string []'. – Botz3000

+0

Vâng, bạn nói đúng. Bạn không chắc chắn điểm là vì tôi đang đấu tranh để nghĩ về bất cứ điều gì bạn có thể bỏ một chuỗi để sử dụng 'Enumerable.Cast()' khác với đối tượng. –

2

Thậm chí nếu bạn không sử dụng rõ ràng "Truyền" thì lỗi biên dịch này cũng sẽ xuất hiện nếu bạn sử dụng biểu thức LINQ và quên "using System.Linq;"

Các vấn đề liên quan