2015-03-24 97 views
1

我創建的簡單類型只包含一個依賴項屬性「文本」返回字符串。從字符串到我喜歡的類型容易轉換我寫了這個代碼:列表<Type1>到列表<Type2>轉換WPF

public static implicit operator string(StringDP sdp) 
{ 
    return sdp.Text; 
} 

public static implicit operator StringDP(string str) 
{ 
    return new StringDP(str); 
} 

我希望能有類似的轉換,從List<string>List<myType>。我能做到嗎?或者我必須使用這樣的東西:

public List<string> Convert(List<myType> lst); 
public List<myType> Convert(List<string> lst); 

謝謝!

回答

1

不,這是不可能的。從the documentation

要轉換的參數的類型或轉換結果的類型(但不是兩者)必須是包含類型。

您的假設隱式轉換中涉及的兩種類型都是泛型List<T>類的具體版本。既然你不能自己添加運營商到List<T>,那麼運營商就無法實現你的目標,這是不可能的。

沒有更多的上下文,我承認我無法真正評論你已經定義的string的隱式轉換。但總的來說,你應該非常小心implicit轉換。假設您的類型的隱式轉換符合「安全」準則,那麼整個類型列表的轉換將是「很好」。

此轉換可以使用自定義方法完成,例如您的示例。或者你可以使用LINQ或List<T>.ConvertAll()方法。例如:

List<string> listOfString = listOfMyType.Select(item => (string)item).ToList(); 
List<myType> listOfMyType = listOfString.ConvertAll(item => (myType)item); 
// etc. 

但是,即使在那裏,我建議你應該小心你是如何使用類似的東西。轉換價值的單個實例是一回事,但轉換整個集合涉及相當多的開銷,並且很可能不是解決問題的正確方法。

不知道什麼是實際問題,我無法提供替代方案。只是建議你對設計路徑非常警惕,你似乎要走下坡路。

相關問題