2013-07-22 68 views
0

我要自定義數據列表:基於多了兩個自定義列表中選擇項目加入標準

public class DatType1 
{ 

    public string yr; 
    public string qr; 
    public string mt; 
    public string cw; 
    public string tar; 
    public string rg; 
    public string mac; 
    public string fuel; 
    public double fp; 
    public double fi; 
    public double fd; 

} 

public class DatType2 
{ 

    public string yr; 
    public string qr; 
    public string mt; 
    public string cw; 
    public string tar; 
    public string RG; 
    public double pp; 
    public double pi; 
    public double fp; 
    public double fi; 
    public double fd; 


} 

正如你可以看到有很多兩個之間的重疊。我想將DatType1.fp,DatType1.fi,DatType1.fd的值添加到DateType2中,但我需要將它們放在正確的位置,正確的位置表示一堆項目的位置相等。

我在這裏看了很多網站,但無法弄清楚。我曾嘗試某事像這樣:

from a in TableA 
from b in TableB 
where a.yr==b.yr & a.qr==b.qr & a.RG == b.RG & a.tar ==b.tar 
select(r=> new DatType2{....} 

,然後在括號內重複從DateType2的一切,我想保持和增加DatType1.fp,DatType1.fi,DatType1.fd。

如果我用蠻力做到這一點,我會做一個雙循環,並通過DatType1的每一行,看看我在哪裏匹配DatType2中的一行,然後添加DatType1.fp,DatType1.fi,DatType1.fd - 但這將是非常緩慢的

然而,這沒有工作,是遠離優雅! ... :) 任何指針將不勝感激。

感謝

+0

順便說一下,您正在使用'&',一個按位比較運算符。我想你應該使用'&&'而不是。 –

+0

您應該使用更有意義的變量名稱,而不是將所有內容縮寫爲這樣的範圍。它會讓你的代碼更容易閱讀和使用。 – Servy

回答

0

我想創建一個基類,所有的通用數據:

public class BaseClass  
{ 
    public string yr; 
    public string qr; 
    public string mt; 
    public string cw; 
    public string tar; 
    public string rg; 
    public double fp; 
    public double fi; 
    public double fd; 

    public void SetAllValues(BaseClass Other) 
    { 
     this.yr = Other.yr; 
     this.qr = Other.qr; 
     //til the end. 
     this.fd = Other.fd; 
    } 

    //with this you check the equal stuff... 
    public bool HasSameSignature(BaseClass Other) 
    { 
     if (this.yr != Other.yr) return false; 
     if (this.qr != Other.qr) return false; 
     //all other comparisons needed 
     return true; 
    } 

    //with this you set the desired ones: 
    public void SetDesired(BaseClass Other) 
    { 
     this.fp = Other.fp; 
     this.fi = Other.fi; 
     //all other settings needed 
    } 
}  

而其他人會繼承這個基地:

public class DatType1 : BaseClass 
{ 
    public string mac; 
    public string fuel; 
} 


public class DatType2 : BaseClass 
{ 
    public double pp; 
    public double pi; 
} 

現在你可以使用a.HasSameSignature(b)而不是a.yr==b.yr & a.qr==b.qr & a.RG == b.RG & a.tar ==b.tar。 並設置值(或創建一個複製方法,如你所願)....

+0

謝謝丹尼爾。問題在於有很多計算事先都在進行,我無法真正改變。所以我有兩個這兩種數據類型的列表,我需要以某種方式將它們結合起來。我真的不明白我會如何處理你的提議!?但顯然這可能是我沒有得到它... – nik

+0

看到更新,我完全不明白你的問題... –

+0

謝謝。讓我試試 – nik

0

我建議重載兩個對象的相等比較,使DatType1:IEquatable<DatType2>和/或DatType2:IEquatable<DatType1>。這將允許您使用dat1.Equals(dat2)dat2.Equals(dat1)

或者,您可以實施比較委託並將其傳遞爲dat1.Equals(dat2,comparer)comparer.Compare(dat1,dat2)。如果您不能控制DatType1DatType2類型,後者可能是理想選擇。

相關問題