2

我对此进行了一些研究,这似乎是不可能的,但没有一个答案对我的问题足够具体。我目前有一个Stack<object>我将多种不同类型的对象推送到的对象。在我推动它们之前,我将它们装箱,object以便它接受它们。是否有任何可能的方法可以将对象自动拆箱为原始拆箱类型?

4

2 回答 2

2

您可以使用扩展方法OfType<OneOfTheTypes>()仅将那些特定类型的对象转换为正确的类型。

您不能自动将对象转换为具有该对象所具有的运行时类型的兼容类型的编译时类型的变量。
变量的类型是编译时类型,如果编译器在编译时不知道内容属于该类型。编译器不知道堆栈中每个对象实际具有的运行时类型。您必须向编译器(使用强制转换)做出承诺,运行时类型实际上将匹配编译时类型。

但坦率地说。这种“检查我有什么类型”是糟糕设计的典型气味。如果您有类似类型的对象或为不同类型的对象使用不同类型的存储,请尝试使用通用基类设计您的代码。

于 2012-11-11T10:26:14.310 回答
0

没有自动方法可以做到这一点。

试试这个

var objT = (T)Convert.ChangeType(obj, typeof(T));

var tuple = new  Tuple<object, Type>(someObject, typeof(someObject));

stack.Push(tuple);
于 2012-11-11T10:25:22.850 回答