Определить, является ли объект или происходит от определенного типа? - PullRequest
2 голосов
/ 25 марта 2012

Я ищу оператор is, за исключением того, что операнд типа (справа) является динамическим.

public static bool Is(this object value, Type type)
{      
  if (type == null) throw new ArgumentNullException(type, "type");
  if (value == null) return false;

  var valueType = value.GetType();
  return valueType == type || valueType.IsSubclassOf(type)
    || valueType implements interface
}

Есть ли более простой способ сделать это?

Я пытался использовать IsAssignableFrom, но не работает :

var x = "asdf";
Console.WriteLine(x.GetType().IsAssignableFrom(typeof(object)));
Console.WriteLine(x is object);

Ответы [ 2 ]

5 голосов
/ 25 марта 2012

Звучит так, будто вы ищете IsAssignableFrom:

type.IsAssignableFrom(value.GetType())
3 голосов
/ 25 марта 2012

Да, есть лучший способ, вам просто нужно обратить вашу проблему вспять. Вместо того, чтобы спрашивать, является ли valueType подклассом типа, проверьте, присваивается ли тип из valueType. К счастью, есть вызов, чтобы сделать именно это, см. IsAssignableFrom

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...