2012-06-27 14 views
7

estoy consiguiendo el error:'string []' no contiene una definición de 'Fundido'

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

en el siguiente fragmento de código:

return mNames.Cast().ToArray(); 

Lo directiva using o conjunto de referencia ¿lo necesito? ¿Cómo puedo descubrir tales cosas?

Soy un novato en C# y .NET, solo estoy copiando el código para hacer un trabajo, así que no se ponga demasiado técnico conmigo.

+6

si mNames es una matriz ¿por qué tratan a echarlo a una matriz? –

+0

¿Qué tipo es 'mNames'? –

+4

['Enumerable.Cast'] (http://msdn.microsoft.com/en-us/library/bb341406.aspx#Y1254) arroja los elementos de un' IEnumerable' al tipo ** especificado **, pero usted no he especificado el tipo. –

Respuesta

18

(1) Asegúrese de que está trabajando en C# 3.0+

(2) Asegúrese de que el código contiene:

using System.Linq; 

(3) .Cast es un método genérico, es necesario especificar el parámetro de tipo, así:

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

Eso ya se solucionó - gracias - por copiar el código :-) – Graham

+0

@Graham - entonces, ¿qué fue 'AnotherType' al final? –

+0

AnotherType fue objeto al final – Graham

5

Eso suele suceder cuando se está perdiendo using System.Linq; en la parte superior de su archivo.

También necesitará usar .NET 3.5 o superior para que funcione. System.Linq está en el ensamblado System.Core.dll, que está incluido por defecto en proyectos que usan .NET 3.5 o superior.

EDITAR

En una inspección más cercana, que el código no funcionará como está escrito, porque el método Enumerable.Cast() es genérico, y es necesario que indique en el tipo que está echando a: por ejemplo, mNames.Cast<object>().ToArray();

2

Normalmente, llama al método de extensión Cast<T>() con un argumento de tipo, como mNames.Cast<SomeType>().

De todos modos, mNames ya parece ser un string[], entonces ¿a qué le quieres echar? No sería necesario enviar a object, porque object[] se puede asignar desde string[].

+0

¿Podría estar planeando la conversión al objeto por algún motivo? –

+0

@BennorMcCarthy No es necesario. 'object []' se puede asignar desde 'string []'. – Botz3000

+0

Sí, tienes razón. No estoy seguro de cuál sería el punto porque estoy luchando por pensar en algo a lo que pueda lanzar una cadena utilizando 'Enumerable.Cast()' que no sea el objeto. –

2

Incluso si no usa explícitamente "Cast", este error de compilación también aparecerá si usa expresiones Linq y olvida "using System.Linq;"

Cuestiones relacionadas