我們有類似下面的一些代碼:重鑄,其中兩種類型都有一個共同的基本類型
class Base
{
public string Name;
}
class DeeperBase : Base
{
}
class A : Base
{
public A()
{
Name = "A";
}
}
class B : DeeperBase
{
public B()
{
Name = "B";
}
}
static T Recast<T>(Base original) where T : Base, new()
{
if (!original.GetType().IsAssignableFrom(typeof(T)))
throw new InvalidCastException();
return new T();
}
看起來Recast
試圖檢查兩種類型都返回一個新T
之前兼容。但是,該方法失敗,下面的代碼。
public static void Main(string[] args)
{
var a = new A();
var b = Recast<B>(a); // exception
}
什麼檢查T
和original
分享最大的共同基本類型(在這種情況下,Base
)的正確方法?
你想在這裏做什麼? –
@Anton Gogolev在'Recast'中,有沒有辦法檢查'original'和'T'是否共享一個基類型?我覺得應該有辦法,如果拋出異常,我們必須做錯事。 – rookie
您的重播方法。 (Base original)以這種方式聲明是一個具體類型,所以它失敗了,因爲你試圖傳遞具體類DeeperBase而不是Base類型。你也需要傳遞一個'通用'的。 – bilpor