Respostas:
Tente o seguinte
typeField == typeof(string)
typeField == typeof(DateTime)
O typeofoperador em C # fornecerá um Typeobjeto para o tipo nomeado. Typeinstâncias são comparáveis com o ==operador, portanto, este é um bom método para compará-las.
Nota: Se bem me lembro, há alguns casos em que isso ocorre quando os tipos envolvidos são interfaces COM que são incorporadas em assemblies (via NoPIA). Não parece que este é o caso aqui.
Você pode usar para isso o is operador . Você pode verificar se o objeto é do tipo específico escrevendo:
if (myObject is string)
{
DoSomething()
}
Você pode comparar exatamente o mesmo tipo usando:
class A {
}
var a = new A();
var typeOfa = a.GetType();
if (typeOfa == typeof(A)) {
}
typeof retorna o objeto Type de uma determinada classe.
Mas se você tem um tipo B, que herda de A, essa comparação é falsa. E você está procurando IsAssignableFrom .
class B : A {
}
var b = new B();
var typeOfb = b.GetType();
if (typeOfb == typeof(A)) { // false
}
if (typeof(A).IsAssignableFrom(typeOfb)) { // true
}
Se sua instância for Type:
Type typeFiled;
if (typeField == typeof(string))
{
...
}
mas se sua instância for um objecte não um Typeuse o asoperador:
object value;
string text = value as string;
if (text != null)
{
// value is a string and you can do your work here
}
isso tem a vantagem de converter valueapenas uma vez no tipo especificado.
http://msdn.microsoft.com/en-us/library/system.type.gettype.aspx
Console.WriteLine("typeField is a {0}", typeField.GetType());
o que lhe daria algo como
typeField is a String
typeField is a DateTime
ou
http://msdn.microsoft.com/en-us/library/58918ffs(v=vs.71).aspx