Відповіді:
Спробуйте наступне
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