Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用变量类型进行C#强制转换/取消装箱_C#_Unboxing - Fatal编程技术网

使用变量类型进行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明白了。我们意见一致。不,你说得对,我说它是一个物体,但我没有用“类”这个词。你做出了重要的区别。