Як порівняти типи


130

Швидке запитання: як порівняти тип типу (каламбур не призначений) з іншим типом у C #? Я маю в виду, У мене є , Type typeFieldі я хочу знати , якщо це System.String, System.DateTimeі т.д., але typeField.Equals(System.String)не працює.

Якась підказка?

Відповіді:


179

Спробуйте наступне

typeField == typeof(string)
typeField == typeof(DateTime)

typeofОператор в C # дасть вам Typeоб'єкт для зазначеного типу. Typeекземпляри можна порівняти з ==оператором, тому це хороший метод їх порівняння.

Примітка: Якщо я добре пам’ятаю, є випадки, коли це руйнується, коли задіяні типи - це інтерфейси COM, які вбудовуються в збірки (через NoPIA). Не здається, що це так і тут.



32

Ви можете порівняти точно такий же тип, використовуючи:

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
}

7

Якщо ваш примірник 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лише один раз у вказаний тип.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.