Réponses:
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
les instances sont comparables à l' ==
opérateur, c'est donc une bonne méthode pour les comparer.
Remarque: Si je me souviens bien, il y a des cas où cela se décompose lorsque les types impliqués sont des interfaces COM qui sont intégrées dans des assemblys (via NoPIA). Cela ne semble pas être le cas ici.
Vous pouvez utiliser pour cela l' is
opérateur . Vous pouvez ensuite vérifier si l'objet est de type spécifique en écrivant:
if (myObject is string)
{
DoSomething()
}
Vous pouvez comparer exactement le même type en utilisant:
class A {
}
var a = new A();
var typeOfa = a.GetType();
if (typeOfa == typeof(A)) {
}
typeof renvoie l'objet Type d'une classe donnée.
Mais si vous avez un type B, qui hérite de A, alors cette comparaison est fausse. Et vous recherchez IsAssignableFrom .
class B : A {
}
var b = new B();
var typeOfb = b.GetType();
if (typeOfb == typeof(A)) { // false
}
if (typeof(A).IsAssignableFrom(typeOfb)) { // true
}
Si votre instance est Type
:
Type typeFiled;
if (typeField == typeof(string))
{
...
}
mais si votre instance est un object
et non un, Type
utilisez l' as
opérateur:
object value;
string text = value as string;
if (text != null)
{
// value is a string and you can do your work here
}
cela présente l'avantage de value
ne convertir qu'une seule fois dans le type spécifié.
http://msdn.microsoft.com/en-us/library/system.type.gettype.aspx
Console.WriteLine("typeField is a {0}", typeField.GetType());
ce 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