我試圖做這樣的事情:如何拆箱一個C#對象動態類型
void someMethod(TypeA object) { ... }
void someMethod(TypeB object) { ... }
object getObject()
{
if (...) return new TypeA();
else return new TypeB();
}
object obj = getObject();
(obj.GetType()) obj; // won't compile
someMethod(obj);
很顯然,我很困惑在這裏。我知道我能僅通過寫了一個條件語句這項工作 -
if (obj.GetType() == typeof(TypeA)) obj = (TypeA)obj;
else if (obj.GetType() == typeof(TypeB)) obj = (TypeB)obj;
- 但不是有某種方式在運行時做到這一點?
編輯 我同意它似乎也許不是最好的設計選擇,所以這裏是上下文。上面代碼的要點是MongoDB的Repository基類。我希望它能夠處理不同種類的表格。所以,someMethod()實際上是刪除;並且TypeA和TypeB是ObjectID和Guid;底部的代碼是類型不可知的部分刪除方法,該方法接受ID作爲字符串; getObject()是解析ID參數的一種方法。
你混爲一談與它相關聯的運行時類型信息的類型'T':'typeof運算( T)'。它們不是一回事,也不能相互替代。 – 2012-04-10 18:09:41
可能會有更好的設計選擇,但是您將代碼的實際目標從您的帖子中刪除。也許我們可以爲您提供一種更好,完全不同的方式來編寫解決方案,如果您讓我們知道您試圖使用此代碼完成什麼。 – 2012-04-10 18:12:35
@Kirk Woll,我知道不同之處,我只是想說明我正在嘗試做什麼。 – McGarnagle 2012-04-10 18:22:00