2015-04-04 75 views
2

新到C#和#1 ......請隨時指出這應該是不同的或其他地方問如何通過「詞典」作爲字典<x,Interface>」

考慮:

public interface IPoint {...} 
public struct DeliveryPoint : IPoint {...} 

和生成一個字典具有大量的投遞點代碼:

... 
Dictionary<uint,DeliveryPoint> dict = new Dictionary<uint,DeliveryPoint>(); 
... 

的點現在需要被傳遞到例程requir ES接口類型:

public void doSomething(Dictionary<uint,IPoint> dict) { ...} 

想過我可以做這樣的事情:

doSomething(dict); 

只有解決辦法,我發現是創建一個新的列表,並複製所有這些似乎點擊敗實施界面的全部目的。

有沒有更好的方法?

+1

問題是IDictionary不是協變的,它是不變的。 – Shoe 2015-04-04 02:22:06

+1

最簡單的變化就是使它成爲'新詞典()'。 – user2864740 2015-04-04 02:22:44

+0

注意:「創建一個新的列表並複製所有的點」聽起來像是一個奇怪的解決方案,通過'字典'...... – 2015-04-04 02:35:23

回答

3

使該方法通用於類型實現接口的值。

public void DoSomething<TPoint>(IDictionary<uint, TPoint> dict) where TPoint : IPoint 
{ 
    // do stuff 
} 
+0

這很好。謝謝! – Mark 2015-04-04 03:54:47