2008-11-29 8 views

Respuesta

21

¿Cuál es la razón detrás de Any ... Equals? ¿Pasó por alto Contains?

bool result = Enum.GetNames(typeof(FileExtensions)).Contains("mp3"); 
+0

Tiene razón: P –

+0

Esto requiere 'using System.Linq', ¿correcto? –

8

Mientras presiona submit pensé en la respuesta a mí mismo:

Enum.GetNames(typeof(FileExtensions)).Any(f=>f.Equals("."+file.Extension)) 
+0

Pero no puede marcar su propia entrada como respuesta. Pero eso es lógico, supongo. –

+0

file.Extension tiene el período principal - no los nombres enum. ¿No debería ser eso (f => ("." + F) .Equals (file.Extension))? –

+0

Tu publicación me ayudó a encontrar una respuesta para mi problema también: public enum Something {John, Rob, Tim} var msg = "Me gusta Tim, él es bueno"; var isOk = Enum.GetNames (typeof (Algo)). Any (x => msg.Contains (x.ToString())); –

0

Usted puede hacer eso con el tipo System.Enum:

string extension = Enum.GetName(typeof(FileExtensions), FileExtensions.mp3); 

if (extension == file.Extension) 
    // do something here 

Actualización:

Ah, entendió mal que desea verificar toda la enumeración de la extensión y no que un valor de enumeración específico coincida con la extensión. En ese caso, su enfoque con GetNames() es la ruta: lamentamos no poder marcar su propia respuesta como aceptada para su propia pregunta. ;-)

+0

Eso verificará si mi archivo tiene esa extensión exacta.Si quisiera verificarlo, también podría hacerlo si (file.Extension.equals (FileExtensions.Mp3.ToString()) [no probado] –

1

se puede ampliar el tipo FileInfo con el siguiente método de extensión:

public static bool HasExtension(this FileInfo file) 
{ 
    var ext = file.Extension.StartsWith(".") ? file.Extension.Substring(1) 
              : file.Extension; 

    return Enum.GetNames(typeof(FileExtensions)) 
       .Any(f => f.Equals(ext)); 
} 

y usarlo como:

bool hasExtension = file.HasExtension(); 
0

Enum.IsDefined tomará una cadena que contenga el nombre de un valor enum. La única fealdad es que hay que pelar el punto inicial fuera de File.Extension y es sensible a mayúsculas:

Enum.IsDefined(typeof(FileExtension), file.Extension.Substring(1).ToLower()) 

Editar: Extensión método de la bondad de acercarse a su sintaxis deseada:

IEnumerable<string> GetNames(this Type t) { 
    if (!t.IsEnum) throw new ArgumentException(); 

    return Enum.GetNames(t); 
} 

typeof(FileExtensions).GetNames().Any(e=>e.ToString().Equals(file.Extension)); 

En lo personal, aunque ruta, me sigue más bien la IsDefined:

bool IsDefined(this Type t, string name) { 
    if (!t.IsEnum) throw new ArgumentException(); 

    return Enum.IsDefined(t, name); 
} 

typeof(FileExtension).IsDefined(file.Extension); 
0

la mejor forma de hacerlo es utilizar la función Enum.IsDefined. Es bastante fácil, en su caso:

if (Enum.IsDefined(typeof(FileExtentions), file.Extension)) 
+1

Check @Mark Brackett respuesta –

Cuestiones relacionadas