我有一個泛型類,我需要約束只值類型(int,float等)。我有一個基於類型測試調用Parse方法的方法。例如:演員值類型到通用
class MyClass<T>
{
...
private static T ParseEntry(string entry)
{
if(typeof(T) == typeof(float))
{
return (T) float.Parse(entry);
}
if(typeof(T) == typeof(int))
{
.... you get the idea
}
}
}
約束噸至struct
不工作,我真的想避免裝箱/如果可能的話拆箱。有任何想法嗎?
編輯:多給點見識。我注意到在一個庫中,我正在開發兩個類具有非常相似的屬性/方法等,唯一的區別是數據的基礎類型(int或float)。這引導我進行泛型設計。唯一的困擾是因爲調用特定的Parse方法,這取決於它是float還是int。我可以用拳擊/拆箱來解決它,但如果可能的話,我真的很想避免這種情況。
現在我想知道...... CLR是否允許'System.Int32'作爲約束?我們可以用Jon Skeet在Unconstrained Melody上使用的相同技巧嗎? –
@Martinho:不,你不能。那又有什麼意義呢?像MyFunc(T num)這樣的方法簽名,其中T:int將與「MyFunc(int num)」實際上相同。 –
LukeH
代表解決方案似乎是最簡單的。構造函數在庫的內部(即用戶可以訪問創建的對象,但不能創建它們),因此傳遞額外的參數沒有什麼大不了的。 –