2012-02-23 7 views
3

ジェネリック機能をベースクラスに引き継ぎようとしていますが、多様なデータタイプがこれをやめさせています。参照してください:私は類似点をプルアップしようとしている汎用ベースを作成する

public class OutWriter 
{ 
    private readonly IEnumerable<long> series1; 
     private readonly IEnumerable<long> series2 
     private readonly IEnumerable<long> series3 
     private readonly IEnumerable<double> series4 
     private readonly double sum; 

public OutWriter() 
{ 
    series1 = PopulateS1() 
    series2 = PopulateS2() 
    series3 = PopulateS3() 
    series4 = PopulateS4() 

sum = series4.Aggregate((x,y)=>x+y); 
} 
} 

public class PaperWriter 
{ 
    private readonly IEnumerable<BigInteger> series1; 
     private readonly IEnumerable<BigInteger> series2 
     private readonly IEnumerable<BigInteger> series3 
     private readonly IEnumerable<BigInteger> series4 
     private readonly BigInteger sum; 

public PaperWriter() 
{ 
    series1 = PopulateS1() 
    series2 = PopulateS2() 
    series3 = PopulateS3() 
    series4 = PopulateS4() 

sum = series4.Aggregate((x,y)=>x+y); 
} 
} 

public class Base<T>() 
{ 
    ???? 
} 

、しかしlongdoubleと関与BigIntegerがあります。また、集合体は、+演算のためにコンパイル時エラーをスローします。それを適切に行う方法を教えてもらえますか?

おかげで、 -Mike

+1

これらのタイプでは簡単ではありませんが、これらの演算子に使用できる汎用的な制約はないため、恐れがあります。しかし、この質問は常に出てきて、私はJon Skeet(誰かになるかもしれない、思い出さないでください)がかなり良い解決策を持っていたと信じています。それはどこかにありますが、私は今それを検索することはできません。 –

答えて

1

数学リングを統一C#では何もありません。悪質なJon Skeetによって維持されているMiscUtilパッケージや、別のStackOverflow freqenter Marc Gravelによって書かれたオペレータユーティリティなどの回避策があり、使用方法の説明はhereです。この考え方は、加算、乗算などの演算を関数呼び出しとして抽出することです。このリンクでは、式を使用して加算、乗算、除算、減算、より小さい、等価演算子、その他の演算子を使用するOperatorクラスが提供され、すべて簡単に拡張できます。

関連する問題