2014-11-05 6 views
3

Я мог бы использовать Type.IsValueType, чтобы понять это прямолинейно в .net 4.5, но когда я создаю универсальные приложения, используя портативную библиотеку, у него нет эквивалента метод, чтобы узнать, является ли тип значением или нет.Как определить, является ли объект типом значения

Есть ли какой-нибудь другой трюк, чтобы найти это?

+0

Это говорит о поддержке переносной библиотеки: http://msdn.microsoft.com/en-us/library/system.type.isvaluetype(v=vs.110).aspx – bit

+0

Вы хотите написать dll, который будет использоваться в другом проекте? –

+1

Он говорит, что поддерживается, но я не могу найти свойство в классе Type для пространства имен System при написании универсального приложения: Ошибка 'System.Type' не содержит определения для 'isValueType' и никакого метода расширения ' isValueType ', принимающий первый аргумент типа «System.Type», может быть найден (вам не хватает директивы using или ссылки на сборку?) – sargeMonkey

ответ

1

Один из способов я нашел:

TypeOf (ValueType) .IsAssignableFrom (тип)

+0

Это работает? Я думал, что все происходит из 'System.Object'. –

+1

Прошу прощения, произошла ошибка в копии/вставке. Теперь она исправлена. – sargeMonkey

4

Попробуйте type.GetTypeInfo().IsValueType. Также убедитесь, что у вас есть оператор using для System.Reflection, поэтому доступен способ расширения GetTypeInfo().

+0

Его нет в Windows 8.1 runtime – sargeMonkey

+1

@sargeMonkey Что заставляет вас думать, что его там нет? Я создал новое пустое универсальное приложение, добавил класс в общий проект и смог получить доступ к 'typeof (object) .GetTypeInfo(). IsValueType' после добавления инструкции' using System.Reflection ;'. –

+0

Попробуйте добавить проект библиотеки .net 4 в решение и посмотреть, работает ли приведенный выше код ... Я бы упомянул ранее, вот где я застрял – sargeMonkey