2012-08-30 128 views
0

我有作爲創建泛型類型依賴於其他類型的C#

public class SerializableList<TList, TValue> : IXmlSerializable where TList : IList<TValue> 

問題來試圖實現構造函數,以確保我有一個從TList對象時,它被定義的類。

public SerializableList() 
{ 
    FList = new TList(); 
} 

這引發了沒有new()約束的預期錯誤。正如我希望能夠使用的

var myList = new SerializableList<SortedList<string>, string>(); 

定義這是否意味着我已經觀察事物的方式不對,或者是有什麼辦法可以定義新FLIST對象?

+1

對不起,我不知道懂嗎。什麼阻止你寫'公共類SerializableList :IXmlSerializable其中TList:IList ,new()'? – JohnB

+0

這裏有什麼問題?如果你想新的和編譯器說新的約束是缺少的,那麼你可以簡單地添加新的約束... –

+0

想到我試過new()並且它使用列表導致了一個問題。這並不是我要求刪除的問題。對不起,浪費時間,如果我做的。 – Jason

回答

2
public class SerializableList<TList, TValue> : IXmlSerializable 
    where TList : IList<TValue>, new() 
+0

是的,我以爲我試過這個,但沒有奏效。想想我會刪除這個問題。 – Jason

+0

@Jason你是什麼意思「它沒有工作」?它沒有編譯?它拋出一個異常? –

+0

我看到的「錯誤」不能與new()添加到SerializableList的聲明有關。你提出的建議完全按照要求工作。基本上當我在提問之前嘗試它時,或者在整個過程中修復了一些乾淨的重建工作時,我都會搞得一團糟。請求刪除該問題,因爲它會混淆人。 – Jason

1

你想是什麼Generic Type Constraints

在您的實例類的聲明必須

public class SerializableList<TList, TValue> 
    : IXmlSerializable where TList : IList<TValue>, new() 

new()強制執行TList必須有一個無參數的構造函數

+0

是否沒有逗號缺失? – JohnB

+0

確實,謝謝@JohnB :) –