Ответы:
Попробуйте следующее
typeField == typeof(string)
typeField == typeof(DateTime)
typeofОператор в C # даст вам Typeобъект для указанного типа. Typeэкземпляры сопоставимы с ==оператором, поэтому это хороший метод их сравнения.
Примечание. Если я правильно помню, в некоторых случаях это выходит из строя, когда задействованные типы являются интерфейсами COM, которые встроены в сборки (через NoPIA). Не похоже, что здесь дело обстоит именно так.
Вы можете использовать для этого is оператора . Затем вы можете проверить, является ли объект конкретным типом, написав:
if (myObject is string)
{
DoSomething()
}
Вы можете сравнить точно такой же тип, используя:
class A {
}
var a = new A();
var typeOfa = a.GetType();
if (typeOfa == typeof(A)) {
}
typeof возвращает объект Type из заданного класса.
Но если у вас есть тип B, унаследованный от A, тогда это сравнение неверно. И вы ищете IsAssignableFrom .
class B : A {
}
var b = new B();
var typeOfb = b.GetType();
if (typeOfb == typeof(A)) { // false
}
if (typeof(A).IsAssignableFrom(typeOfb)) { // true
}
Если ваш экземпляр Type:
Type typeFiled;
if (typeField == typeof(string))
{
...
}
но если ваш экземпляр является objectи не Typeиспользовать asоператор:
object value;
string text = value as string;
if (text != null)
{
// value is a string and you can do your work here
}
это имеет то преимущество, что можно преобразовать valueтолько один раз в указанный тип.
http://msdn.microsoft.com/en-us/library/system.type.gettype.aspx
Console.WriteLine("typeField is a {0}", typeField.GetType());
что даст вам что-то вроде
typeField is a String
typeField is a DateTime
или
http://msdn.microsoft.com/en-us/library/58918ffs(v=vs.71).aspx