[英]C# Cast / Unbox using variable Types
有没有办法使用像这样的变量类型来取消装箱/转换
var varType = typeof(int);
var variable = 5;
return (varType)variable;
你提问题的前提有问题。 C# 是一种静态类型语言,在编译时必须知道每个变量的类型。 无法解决这个问题,因此您要么必须指定对象的类型,要么使用dynamic
作为类型(除非您正在执行互操作或类似操作,否则请不要这样做)。
在您的示例中, varType
的Type
是Type
。 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
是一个类型名称(如object
或int
或MyClass
)。 但是,我的答案仍然基本成立 - 除了您的确切问题(编辑后)的答案是*No*
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.