2008-11-29 7 views

Répondre

21

Quelle est la raison derrière Any ... Equals? Avez-vous oublié Contains?

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

Vous avez raison: P –

+0

Cela nécessite 'using System.Linq', correct? –

8

Tout en appuyant sur submit je pensais que la réponse moi-même:

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

Mais vous ne pouvez pas marquer votre propre entrée comme réponse. Mais c'est logique, je suppose. –

+0

file.Extension a la période principale - pas les noms enum. Cela ne devrait-il pas être le cas (f => ("." + F) .Equals (file.Extension))? –

+0

Vous postez m'a aidé à trouver une réponse à mon problème aussi: public enum Quelque chose {John, Rob, Tim} var msg = "J'aime Tim, il est bon"; var isOk = Enum.GetNames (typeof (Quelque chose)). Any (x => msg.Contains (x.ToString())); –

0

Vous pouvez le faire avec le type System.Enum:

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

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

Mise à jour:

Ah, je mal compris que vous voulez vérifier l'enum entier pour l'extension et pas qu'une valeur enum spécifique correspond à l'extension. Dans ce cas, votre approche avec GetNames() est la route - désolé, vous ne pouvez pas marquer votre propre réponse comme acceptée pour votre propre question. ;-)

+0

Cela permettrait de vérifier si mon fichier a cette extension exacte.Si je voulais vérifier cela, je pourrais aussi faire if (file.Extension.equals (FileExtensions.Mp3.ToString()) [non testé] –

1

Vous pouvez étendre le type FileInfo avec la méthode d'extension suivante:

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)); 
} 

et de l'utiliser comme:

bool hasExtension = file.HasExtension(); 
0

Enum.IsDefined prendra une chaîne contenant le nom d'une valeur enum. La seule laideur est que vous devez enlever la période menant hors de File.Extension et il est sensible à la casse:

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

Edit: bonté Méthode d'extension pour se rapprocher de votre syntaxe désirée:

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)); 

Personnellement, bien que , Je préfère encore la route 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 meilleure façon est d'utiliser la fonction Enum.IsDefined. C'est assez facile, dans votre cas:

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

@ Mark Brackett réponse –

Questions connexes