如果T是struct,則我想通過執行一個實現來實現我的通用IQueue<T>
接口,而如果T是類,則實現另一個實現。如果類型參數是結構體或類,則選擇泛型實現
interface IQueue<T> { ... }
class StructQueue<T> : IQueue<T> where T : struct { ... }
class RefQueue<T> : IQueue<T> where T : class { ... }
的,我想有一種基於T的一種工廠方法返回一個或一個實例另:
static IQueue<T> CreateQueue<T>() {
if (typeof(T).IsValueType) {
return new StructQueue<T>();
}
return new RefQueue<T>();
}
當然,編譯器表明T應當是非分別爲可空/可空類型參數。
有沒有辦法將T轉換爲struct類型(以及類類型)以使該方法編譯?這種運行時調度甚至可以用C#進行嗎?
您可以使用Reflection –
請注意,可爲空的值類型不會傳遞,也不會傳遞'class',也不會傳遞'struct'約束。你應該有第三個這個案例的實施課。 – PetSerAl