C# Cast / Unbox 使用变量类型

C# Cast / Unbox using variable Types

有没有办法unbox/cast使用像

这样的变量类型
var varType = typeof(int);
var variable = 5;
return (varType)variable;

你的问题前提有问题。 C#是静态类型语言,编译时必须知道每个变量的类型。没有办法解决这个问题,所以您要么必须指定对象的类型,要么使用 dynamic 作为类型( 除非您正在进行互操作或类似的东西)。

在您的示例中,varType 的类型是 Typevariable 的类型是 int。但是,如果您提出的建议存在于 C# 中,那么此函数的 return 类型是什么?由于 varType 可以包含任何类型,因此此函数的 return 类型只能在 运行 时知道,这在静态类型语言中是不可能的。

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

您的问题需要更多信息才能回答,因此我将添加一些信息。考虑一下你有一个像

这样的函数
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
}

你不能做的是 return 将任何东西作为 object 以外的东西装箱返回给来电者;据我所知,无法表达概念上可能是的类型:

Boxed<T> where T: struct

而且,

  • 拳击总是"taking a value type instance and converting to be an object"
  • 开箱是"taking a previously boxed value type instance and converting it back to be the exactly same type as it was when it started its life"

哦...你的问题多说了。我的回答早于您的第一行代码:var varType = typeof(int); 我曾假设 varType 是一个类型名称(如 objectintMyClass)。但是,我的答案仍然大部分成立 - 除了您的确切问题(编辑后)的答案是 *No*