繁体   English   中英

C# 使用变量类型强制转换/取消装箱

[英]C# Cast / Unbox using variable Types

有没有办法使用像这样的变量类型来取消装箱/转换

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

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

在您的示例中, varTypeTypeType variable的类型是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
}

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

Boxed<T> where T: struct

和,

  • 装箱总是“取一个值类型实例并转换为一个object
  • 拆箱是“将先前装箱的值类型实例转换回与它开始使用时完全相同的类型

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM