C# 如何确定对象是否为值类型

C# 如何确定对象是否为值类型,c#,.net-4.5,portable-class-library,C#,.net 4.5,Portable Class Library,我可以在.net 4.5中使用Type.IsValueType以一种简单的方式解决这个问题,但是当我使用便携库创建通用应用程序时,它没有任何等效的方法来确定类型是否为value 找到这个问题还有其他窍门吗?我找到的一个解决方法是: typeof(ValueType).IsAssignableFrom(type)尝试type.GetTypeInfo().IsValueType。还要确保您有一个用于System.Reflection的using语句,因此GetTypeInfo()扩展方法可用。这表示

我可以在.net 4.5中使用Type.IsValueType以一种简单的方式解决这个问题,但是当我使用便携库创建通用应用程序时,它没有任何等效的方法来确定类型是否为value


找到这个问题还有其他窍门吗?

我找到的一个解决方法是:


typeof(ValueType).IsAssignableFrom(type)

尝试
type.GetTypeInfo().IsValueType
。还要确保您有一个用于System.Reflection的using语句,因此
GetTypeInfo()
扩展方法可用。

这表示可移植库支持扩展方法:是否要编写dll以用于其他项目?它表示支持扩展方法,但在编写通用应用程序时,我在系统命名空间的类型类中找不到属性:错误1“System.Type”不包含“isValueType”的定义,并且没有可以找到接受类型为“System.type”的第一个参数的扩展方法“isValueType”(是否缺少using指令或程序集引用?)@sargeMonkey:isValueType是
isValueType
,大写字母为“I”
isValueType
有什么问题?这行吗?我认为一切都是从
System.Object
派生的。很抱歉,复制/粘贴中有一个错误:)现在已修复。它在windows 8.1中不可用runtime@sargeMonkey你凭什么认为它不在那里?我创建了一个新的空白通用应用程序,向共享项目中添加了一个类,并且在使用System.Reflection添加
后,能够访问
typeof(object).GetTypeInfo().IsValueType
语句。尝试在解决方案中添加一个.NET4库项目,看看上面的代码是否有效…我应该在前面提到,这就是我现在的位置stuck@sargeMonkey在.NET4库项目中,
IsValueType
在Type上直接可用(即您不需要调用
GetTypeInfo
)。但您不能从Windows 8.1应用程序引用.NET 4项目。是否尝试将同一文件链接到两个项目中?或者您正在使用针对.NET4的PCL?或者发生了什么?任何一种方式都会导致这个问题。您可以添加一个针对windows 8.1的PCL,并在那里添加相同的代码,这可能会导致此问题。我正在编写一个库,其中包含一个针对多个平台的共享PCL。net 4 win 8.1运行时目标没有给我类型.IsValueType或类型.GetTypeInfo().IsValueType