2010-03-23 61 views
1

我有一個類,看起來像這樣:再有這樣定義字典C#能否讓我的課程看起來像另一個課程?

public class BasePadWI 
{ 
    public WorkItem WorkItemReference { get; set; } 
    .... Other stuff ...... 
} 

我:

public Dictionary<BasePadWI, Canvas> Pad { get; set; } 

然後,我會喜歡做這樣的呼籲:

List<WorkItem> workItems = Pad.Keys.ToList(); 

(注:WorkItem是一個密封類,所以我不能繼承)

在課堂上我能做些什麼,讓它看起來像是WorkItem

我在此期間做到了這一點:

List<WorkItem> workItems = Pad.Keys.ToList().ConvertAll(x=>x.WorkItemReference); 

回答

3

您可以覆蓋投運營商

public class BasePadWI 
{ 
    protected WorkItem _workItemReference; 
    public WorkItem WorkItemReference { get { return _workItemReference; }} 


    public static implicit operator WorkItemReference(BasePadWI item) 
    { 
     return item._workItemReference; 
    } 
    .... Other stuff ...... 
} 

這可能是有點誤導,因爲你沒有真正鑄造BasePadWI到工作項目,但它應該讓你建立你想很容易的名單。

當你這樣做的以下內容:

BasePadWI bpw = new BasePadWI(); 

WorkItem item = bpw; 

BPW應隱式轉換爲一個工作項目,其中,由於我們已經聲明瞭操作,返回到BPW的內部工作項目_workItemReference參考。

你也可以用它來將數據庫連接轉換爲整數,所以要注意不要讓你的代碼太難以被可憐的schmuck解釋,誰將在稍後保留這個連接。

+0

+1:很好的答案。 – codenheim 2010-03-23 22:30:27

+0

雖然這並不是我想要的(它不適用於列表),但它是最接近的。謝謝戴夫! – Vaccano 2010-03-23 22:36:17

9

你可以這樣做:

List<WorkItem> workItems = Pad 
          .Keys 
          .Select(basePad => basePad.WorkItemReference) 
          .ToList(); 

這使用LINQ把解壓出來的飛行您的會員。

+0

這與轉換選項類似,但更好,因爲我不必在轉換之前執行ToList。不是我想要的,但是謝謝。 – Vaccano 2010-03-23 22:38:08

2

不。一個BasePadWI不是一個WorkItem。如果你想要繼承的好處,那麼你需要使用繼承。在你的情況下,你需要讓BasePadWI繼承自WorkItem。 ConvertAll與您在不解封WorkItem的情況下可以做的一樣好。

2

覆蓋演員操作符是可能的。我看到大衛剛剛發佈了相同的內容。這是一個示例。

class Program 
    { 
     static void Main(string[] args) 
     { 
     Foo foo = new Foo(); 
     BasePadWI bp = (BasePadWI)foo; 
     Console.WriteLine(bp.name); 
     } 
    } 

    class BasePadWI { 
     public string name = "BasePadWI"; 
    } 

    class Foo 
    { 
     BasePadWI basePadWI = new BasePadWI(); 

     public static implicit operator BasePadWI(Foo foo) 
     { 
     System.Console.WriteLine("Converted Foo to BasePadWI"); 
     return foo.basePadWI; 
     } 
    } 
+0

偉大的思想。 =)+1 – 2010-03-23 21:56:42

+0

+1的好東西。戴夫得到了第一個答案。 – Vaccano 2010-03-23 22:36:53