120 votes

Comment comparer les types de

Petite question: comment comparer un Type Type (jeu de mots pas intendend) avec un autre type en C#? Je veux dire, j'ai un Type typeField et je veux savoir si c'est System.String, System.DateTime, etc., mais typeField.Equals(System.String) ne fonctionne pas.

Aucun indice?

169voto

JaredPar Points 333733

Essayez ce qui suit

typeField == typeof(string)
typeField == typeof(DateTime)

L' typeof opérateur en C# vous donnera un Type objet pour le type nommé. Type des occurrences sont comparables avec l' == de l'opérateur, donc c'est une bonne méthode pour comparer.

Remarque: Si je me souviens bien, il y a certains cas où ce décompose quand les types qui y participent sont des interfaces COM qui sont intégrées dans les assemblées (via NoPIA). Ne sonne pas comme c'est le cas ici.

65voto

Rafal Spacjer Points 2344

Vous pouvez utiliser pour cela l' is de l'opérateur. Vous pouvez ensuite vérifier si l'objet est de type spécifique par écrit:

if (myObject is string)
{
  DoSomething()
}

30voto

GvS Points 28137

Vous pouvez comparer exactement du même type à l'aide de:

class A {
}
var a = new A();
var typeOfa = a.GetType();
if (typeOfa == typeof(A)) {
}

typeof renvoie le Type d'un objet d'une classe donnée.

Mais si vous avez un type B qui hérite de A, alors cette comparaison est fausse. Et vous êtes à la recherche pour IsAssignableFrom.

class B : A {
}
var b = new B();
var typeOfb = b.GetType();

if (typeOfb == typeof(A)) { // false
}

if (typeof(A).IsAssignableFrom(typeOfb)) { // true
}

2voto

dotalchemy Points 1682

http://msdn.microsoft.com/en-us/library/system.type.gettype.aspx

Console.WriteLine("typeField is a {0}", typeField.GetType());

qui vous donnerait quelque chose comme

typeField is a String

typeField is a DateTime

ou

http://msdn.microsoft.com/en-us/library/58918ffs(v=vs. 71).aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X