Risposte:
Prova quanto segue
typeField == typeof(string)
typeField == typeof(DateTime)
L' typeofoperatore in C # ti darà un Typeoggetto per il tipo indicato. Typele istanze sono comparabili con l' ==operatore, quindi questo è un buon metodo per confrontarle.
Nota: se ricordo bene, ci sono alcuni casi in cui questo si interrompe quando i tipi coinvolti sono interfacce COM che sono incorporate negli assiemi (tramite NoPIA). Non suona così qui.
È possibile utilizzare per esso l' is operatore . È quindi possibile verificare se l'oggetto è di tipo specifico scrivendo:
if (myObject is string)
{
DoSomething()
}
Puoi confrontare esattamente lo stesso tipo usando:
class A {
}
var a = new A();
var typeOfa = a.GetType();
if (typeOfa == typeof(A)) {
}
typeof restituisce l'oggetto Type da una determinata classe.
Ma se hai un tipo B, che eredita da A, allora questo confronto è falso. E stai cercando IsAssignableFrom .
class B : A {
}
var b = new B();
var typeOfb = b.GetType();
if (typeOfb == typeof(A)) { // false
}
if (typeof(A).IsAssignableFrom(typeOfb)) { // true
}
Se la tua istanza è un Type:
Type typeFiled;
if (typeField == typeof(string))
{
...
}
ma se l'istanza è una objecte non Typeutilizzare l' asoperatore:
object value;
string text = value as string;
if (text != null)
{
// value is a string and you can do your work here
}
questo ha il vantaggio di convertirsi valueuna sola volta nel tipo specificato.
http://msdn.microsoft.com/en-us/library/system.type.gettype.aspx
Console.WriteLine("typeField is a {0}", typeField.GetType());
che ti darebbe qualcosa di simile
typeField is a String
typeField is a DateTime
o
http://msdn.microsoft.com/en-us/library/58918ffs(v=vs.71).aspx