Как определить, является ли System.Object System.Type - PullRequest
3 голосов
/ 20 апреля 2011

Я пишу общий IValueConverter для WPF и отклеиваюсь при сравнении значения с конкретным типом.

Структура моих предметов выглядит примерно так

public interface IAwesome
{
    int AwesomeAmount { get; set; }
}

public class MyAwesomeClass : IAwesome
{
    public int AwesomeAmount { get; set; }
}

Мой метод выглядит примерно так

public bool CompareToType(object value, Type type);

Если бы у меня было ...

var mac = new MyAwesomeClass();
bool isAwesome = CompareToType(mac, typeof(IAwesome));

Точно так же я мог написать

var stream = new FileStream();
bool isStream = CompareToType(stream, typeof(Stream));

Как мне написать свой метод CompareToType, чтобы определить, реализует ли класс Интерфейс или наследует от базового объекта?

Извиняюсь, если мне не хватает чего-то ослепительно очевидного, но я все равно был бы признателен за помощь:)

Ответы [ 6 ]

3 голосов
/ 20 апреля 2011

Использование Type.IsAssignableFrom метод.

Пример:

type.IsAssignableFrom(value.GetType());
2 голосов
/ 20 апреля 2011

может быть, вы ищете is?

var stream = new FileStream();
bool isStream = stream is Stream;

вы также можете попробовать

isStream = typeOf(Stream).IsAssignableFrom(stream.GetType());
1 голос
/ 20 апреля 2011

Если я правильно понимаю, вы ищете это:

if (mac is IAwesome) {}

Или: var t = mac как IAwesome; if (t! = null) {}

0 голосов
/ 20 апреля 2011

Простота реализации

public bool CompareToType(object obj, Type type)
{
    return type != null
        && obj != null
        && type.IsAssignableFrom(obj.GetType());
}
0 голосов
/ 20 апреля 2011

Чтобы проверить, реализует ли класс интерфейс:

var obj = new MyInteracedClass();
typeof(IMyInterface).IsAssignableFrom(obj.GetType());

or

typeof(IMyInterface).IsAssignableFrom(typeof(MyInteracedClass));
0 голосов
/ 20 апреля 2011
bool isAwesome = mac is IAwesome;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...