Respuestas:
Intenta lo siguiente
typeField == typeof(string)
typeField == typeof(DateTime)
El typeofoperador en C # le dará un Typeobjeto para el tipo con nombre. Typelas instancias son comparables con el ==operador, por lo que este es un buen método para compararlas.
Nota: Si no recuerdo mal, hay algunos casos en que esto se rompe cuando los tipos involucrados son interfaces COM que están integradas en ensamblajes (a través de NoPIA). No parece que este sea el caso aquí.
Puedes usar para ello el is operador . Luego puede verificar si el objeto es de un tipo específico escribiendo:
if (myObject is string)
{
DoSomething()
}
Puede comparar exactamente el mismo tipo usando:
class A {
}
var a = new A();
var typeOfa = a.GetType();
if (typeOfa == typeof(A)) {
}
typeof devuelve el objeto Type de una clase dada.
Pero si tiene un tipo B, que hereda de A, entonces esta comparación es falsa. Y estás buscando IsAssignableFrom .
class B : A {
}
var b = new B();
var typeOfb = b.GetType();
if (typeOfb == typeof(A)) { // false
}
if (typeof(A).IsAssignableFrom(typeOfb)) { // true
}
Si su instancia es un Type:
Type typeFiled;
if (typeField == typeof(string))
{
...
}
pero si su instancia es objecty no Typeutiliza el asoperador:
object value;
string text = value as string;
if (text != null)
{
// value is a string and you can do your work here
}
Esto tiene la ventaja de convertir valuesolo una vez en el tipo especificado.
http://msdn.microsoft.com/en-us/library/system.type.gettype.aspx
Console.WriteLine("typeField is a {0}", typeField.GetType());
que te daría algo como
typeField is a String
typeField is a DateTime
o
http://msdn.microsoft.com/en-us/library/58918ffs(v=vs.71).aspx