"string[]"没有包含名为'Cast'的定义。"

9

我遇到了如下错误:

'string[]' 没有包含 'Cast' 的定义,也没有接受类型为 'string[]' 的第一个参数的扩展方法 'Cast' 可用(是否缺少 using 指令或程序集引用?)

在以下代码片段中:

return mNames.Cast().ToArray();

我需要哪些using指示或程序集引用?

我应该如何找到这些信息?

我是C#和.NET的新手,只是复制代码完成任务,请尽量通俗易懂。


6
如果mNames是一个数组,为什么要尝试将其转换成一个数组? - Fedor Hajdu
4
Enumerable.CastIEnumerable中的元素转换为指定的类型,但您尚未指定类型。 - Tim Schmelter
string[] mNames = new string[5] { "one", "two", "three", "four", "five" }; 字符串数组 mNames 包含 5 个元素,分别为 "one"、"two"、"three"、"four" 和 "five"。 - Graham
我不明白你为什么要进行类型转换?它已经是你需要的类型了吧? - Arran
5个回答

27

(1) 确保您正在使用 C# 3.0 或更高版本。

(2) 确保您的代码包含以下内容:

using System.Linq;

(3) .Cast 是一个通用方法,你需要指定类型参数,像这样:

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

做到了 - 谢谢 - 非常感谢你复制代码 :-) - Graham
@Graham - 那么 AnotherType 最终是什么? - H H
AnotherType 最终是一个对象。 - Graham

6

当您的文件顶部缺少using System.Linq;时,通常会出现这种情况。

您还需要使用.NET 3.5或更高版本才能使其工作。System.Linq在System.Core.dll程序集中,这个程序集默认包含在使用.NET 3.5或更高版本的项目中。

编辑

经仔细检查,该代码将永远无法按原样工作,因为Enumerable.Cast()方法是泛型的,并要求您传递要转换的类型:例如:mNames.Cast<object>().ToArray();


2
即使您没有明确使用“Cast”,如果使用Linq表达式并忘记“using System.Linq;”,也会出现此编译错误。

2
通常情况下,您需要使用类型参数调用Cast<T>()扩展方法,例如mNames.Cast<SomeType>()
不过,mNames似乎已经是一个string[],所以您想要将其转换成什么呢? 将其强制转换为object并不必要,因为string[]可以分配给object[]

可能有意将其向上转型为对象? - Bennor McCarthy
@BennorMcCarthy 不需要。object[] 可以从 string[] 赋值。 - Botz3000
是的,你说得对。我不确定这样做的意义在哪里,因为我很难想到除了对象之外,你可以使用Enumerable.Cast()将字符串转换成什么。 - Bennor McCarthy
@BennorMcCarthy 通常情况下没有什么影响,因为字符串是密封的。看起来用户定义的转换运算符也不会改变这一点。 - Botz3000

-1

使用 primary.AddRange(secondary);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接