3
我有一個類,Target<T>
,不能改變,與一個通用的約束。我想從一個沒有約束的泛型類構建這個類的實例。下面演示了我想要做什麼的意圖,但是我意識到這段代碼不會編譯,並且typeof(T).IsClass
是運行時檢查,通用約束是編譯期問題。「強制」符合通用約束
public class TargetMaker<T>
{
public object GetTarget()
{
if (typeof(T).IsClass)
{
return new Target<T>();
}
return default(T);
}
}
public class Target<T> where T : class
{
public Target() { }
}
誰能想到一個辦法,我可以實現我想在這裏TargetMaker不添加匹配約束它,同時保持所有的邏輯在TargetMaker類?
好主意。 'typeof(T).IsClass'已經是反射 - 它比新代碼快得多嗎? – Kobi 2012-01-28 09:13:20
這是*完美* - 謝謝! (在允許時會複選框) – 2012-01-28 09:14:11
@Kobi:與'Activator.CreateInstance'調用相比,'typeof(T).IsClass'會很快。 (至少,這是我的期望,如果我真的關心,我當然會測試:) – 2012-01-28 09:14:44