使用变量类型进行C#Cast /拆箱

时间:2019-12-06 20:03:32

标签: c# unboxing

是否有一种使用类似变量类型的开箱/播出方式

var varType = typeof(int);
var variable = 5;
return (varType)variable;

2 个答案:

答案 0 :(得分:2)

在您提出问题的前提下有一个问题。 C#是一种静态类型的语言,每个变量的类型必须在编译时就知道。无法解决这个问题,因此您必须指定对象的类型,或者使用dynamic作为类型(,除非您要进行互操作或类似操作,否则请)。

在您的示例中,varType的类型为Typevariable的类型为int。但是,如果您提出的内容存在于C#中,那么此函数的返回类型是什么?由于varType可以保留任何类型,因此该函数的返回类型只能在运行时知道,而在静态类型语言中则不可能。

也许如果您提供了一个更具体的示例,说明您认为需要使用类似的内容,那么可能会有更好的方法来实现。

答案 1 :(得分:1)

您的问题需要更多信息才能回答,因此我将添加一些信息。假设您有

之类的函数
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
}

您不能做的是将装箱的东西像object以外的其他形式返回给呼叫者;据我所知,没有办法表达概念上可能是这样的类型:

Boxed<T> where T: struct

然后

  • 装箱始终是“采用值类型实例并将其转换为object
  • 取消装箱是“取一个以前装箱的值类型实例,并将其转换回与开始使用时完全相同的类型”

哦...您在问题中输入了更多的单词。我的答案早于您的第一行代码:var varType = typeof(int);,我假设varType是类型名称(例如objectintMyClass)。但是,我的答案仍然大部分有效-除了您的确切问题(编辑后)的答案为*No*

相关问题