对象的自动拆箱

时间:2012-11-11 10:21:36

标签: c# casting boxing autoboxing

我已经对此做了一些研究,看起来很不可能,但没有一个答案对我的问题有足够的了解。我目前有一个Stack<object>我将多种不同类型的对象推送到。在我推动它们之前,我将它们装入object以便接受它们。是否有任何可能的方法将对象自动拆箱到原始的未装箱类型?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

没有 Automagic 方法。

试试这个

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

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

stack.Push(tuple);