C#如何检查object类型的变量是否可以转换为struct类型?

C#如何检查object类型的变量是否可以转换为struct类型?,c#,C#,在C#中,如果我有一个类型为object的变量,我如何检查我是否可以将它转换为一个类型T,这是一个值类型?as操作符不起作用,因为t是一个值类型,o.GetType().Equals(typeof(t))只检查对象是否是类型为t的装箱变量,但不检查它是否是可以转换为t的对象。试试这个 object obj = "wer"; var isCompatible = typeof(T).IsAssignableFrom(obj.GetType()); 你可以试试这些: objec

在C#中,如果我有一个类型为
object
的变量,我如何检查我是否可以将它转换为一个类型
T
,这是一个值类型?
as
操作符不起作用,因为t是一个值类型,
o.GetType().Equals(typeof(t))
只检查对象是否是类型为t的装箱变量,但不检查它是否是可以转换为t的对象。

试试这个

object obj = "wer";
var isCompatible = typeof(T).IsAssignableFrom(obj.GetType());
你可以试试这些:

object obj = "wer";
typeof(T).IsInstanceOfType(obj)
阅读更多:

阅读更多:

阅读更多:

但是,您需要注意
IsAssignableFrom
IsInstanceOfType
is
之间的区别。请在此处阅读更多信息:


“…只检查object是否是T类型的装箱变量,但不检查它是否是可以转换为T的变量。”对于structs,这两件事是否等价?你能给出这样一个
T
的例子吗,即
o.GetType().Equals(typeof(T))
为false,但你可以将对象强制转换为
T
@user1282931:不,装箱的
双精度
不能强制转换为
浮点型,反之亦然。在某些情况下,您可以强制转换为不同的类型(例如,
uint
vs
int
或enum),但通常只能取消装箱到原始装箱类型。@user1282931是否可以使用
is
运算符,如
if(o是双d)
。。。不,您不能将盒装的
浮点
转换为
双精度
。尝试
对象o=1f;双d=(双)o。除非你的意思不同?@V0ldek:Whoops-对于
uint
/
int
的情况,我在考虑数组。(C#编译器不允许您将
int[]
转换为
uint[]
,但CLR很乐意这样做。)尽管如此,它仍然可以对int与enum进行解装箱:
object obj = "wer";
obj is T;
object obj = "wer";
typeof(T).IsAssignableFrom(obj.GetType())