使用变量类型进行C#强制转换/取消装箱
有没有一种方法可以使用变量类型(如使用变量类型进行C#强制转换/取消装箱,c#,unboxing,C#,Unboxing,有没有一种方法可以使用变量类型(如 var varType = typeof(int); var variable = 5; return (varType)variable; 你的问题的前提有个问题。C#是一种静态类型语言,在编译时必须知道每个变量的类型。无法回避这一点,因此您必须指定对象的类型,或者使用动态作为类型(除非您正在执行互操作或类似操作,否则请不要这样做) 在您的示例中,varType的类型是type。变量的类型为int。但是,如果你所建议的存在于C#,那么这个函数的返回类型是什
var varType = typeof(int);
var variable = 5;
return (varType)variable;
你的问题的前提有个问题。C#是一种静态类型语言,在编译时必须知道每个变量的类型。无法回避这一点,因此您必须指定对象的类型,或者使用
动态
作为类型(除非您正在执行互操作或类似操作,否则请不要这样做)
在您的示例中,varType
的类型是type
。变量的类型为int
。但是,如果你所建议的存在于C#,那么这个函数的返回类型是什么呢?由于varType
可以保存任何类型,因此此函数的返回类型只能在运行时知道,这在静态类型语言中是不可能的
如果您提供了一个更具体的例子,说明您认为需要在哪些方面使用类似的东西,那么可能有更好的方法来实现这一点。您的问题需要更多的信息来回答,因此我将添加一些信息。假设你有一个像这样的函数
int GetSomeInt () {
var i = (object)5; //at this point, i is a boxed int
return (int)i; //we are unboxing I back into an int and returning it
}
你可以做的另一件事是:
object GetBoxedInt () {
var i = 5;
return (object)i; //here we are returning boxed int back to the caller
}
您不能做的是将装箱的任何东西作为对象以外的任何东西返回给调用者
;据我所知,无法表达概念上可能是的类型:
Boxed<T> where T: struct
装箱,其中T:struct
以及
- 装箱始终是“获取值类型实例并将其转换为
对象”
- 取消装箱是“获取一个以前装箱的值类型实例,并将其转换回与它开始使用时完全相同的类型”
哦。。。你在问题中多加了一些词。我的答案早于您的第一行代码:var varType=typeof(int)
我假设varType
是一个类型名(比如object
或int
或MyClass
)。但是,我的答案仍然基本上是正确的,唯一的例外是,您的确切问题(编辑后)的答案是*No*
您必须包含更多信息。当您在对象类型中存储值类型时,会发生装箱<代码>(对象)5
是装箱的值(object)(new Spork())
不是,因为Spork
已经是最强大的对象了。@Amy从技术上讲Spork
可能是一个结构,在这种情况下,您提供的第二个示例仍然是装箱。@DanielCrha在我的示例中,Spork
是一个类,而不是一个值类型。@DanielCrha明白了。我们意见一致。不,你说得对,我说它是一个物体,但我没有用“类”这个词。你做出了重要的区别。