2016-09-20 21 views
1

これは、スタックオーバーフローに関する私の最初の投稿です。うまくいけば、私は迅速な答えを得る。C#使用方法パブリッククラスオブジェクトの並べ替え/並べ替え

私はこのパブリッククラスExcelValuesを持っています。このクラスには製品配列もあります。

public class ExcelValues 
{ 
    public string SalesCompany; 
    public string Customer; 
    public string CustomerNr; 
    public Product[] Products; 
} 

public class Product 
{ 
    public string Code; 
    public string Description; 
    public string Category; 
    public string Quantity; 
    public string PVCVBlackWhite; 
    public string PVCVColor; 
    public string EndUserPriceEuro; 
    public string EndUserPrice; 
    public string DealerGPPercentage; 
    public string DealerPriceEuro; 

    //For Product Ordering; 
    public string ProductOrder; 
} 

私はExcelファイルに値を書き込むことになっていますが、製品の順序は正しい来ていないので、私は値0,1,2などがありproductOrderは追加します。宣言は、以下を参照してください

この優れた値を使用する前に、商品の注文を商品の並び順に並べ替える必要があります。

アイデア?

私はIEnumerableをしてみたが、構文は私にエラーを与える: コード:事前に

IEnumerable<Product> sortedProducts = outputVals.Products.OrderBy(Product => Product.ProductOrder); 

Error 1 Cannot implicitly convert type 'System.Linq.IOrderedEnumerable<KyoceraCL.Product>' to 'System.Collections.Generic.IEnumerable<KyoceraCL.Product[]>'. An explicit conversion exists (are you missing a cast?)

感謝を。 Sabby

+1

@sstan:あなたのロールバックによって質問が元の不明瞭な状態に戻ったので、私は再編集しました。実際の元の編集テキストを確認してください。 OPはもともと 'IEnumerable 'を置いたが、それをコードとして適切に書式化していないので、型パラメーターがレンダリングされた質問に表示されていなかった。 – David

+0

@David:ああ、それは私がそれのために落ちて初めてではありません。それを指摘してくれてありがとう。 – sstan

+0

'sortedProducts'変数*は* exact *型である必要がありますか?または、この全体的な問題は、暗黙の型では疑問になるでしょうか? 'var sortedProducts = ...' – David

答えて

2

代わりに、非ジェネリックIEnumerableインタフェースの使用IEnumerable<T>

IEnumerable<Product> sortedProducts = outputVals.Products.OrderBy(Product => Product.ProductOrder); 
1

あなたはそれをソートする方法に応じて(方法はすべての製品を通過し、最高/最低を取得するために作ることができます)ProductOrderの値。最高/最低を見つけたら、その順にリストに追加してください。

1

私がテストしたサンプル..私はあなたが最初に提供される汎用のIEnumerableを使用してコードをテストし、意図したとおり、それは動作します:

 ExcelValues outputVals = new ExcelValues(); 
     Product p1 = new Product(); 
     p1.ProductOrder = "a"; 
     Product p2 = new Product(); 
     p2.ProductOrder = "b"; 
     Product p3 = new Product(); 
     p3.ProductOrder = "c"; 
     outputVals.Products = new Product[] { p1, p3, p2 }; 
     IEnumerable sortedProducts = outputVals.Products.OrderBy(Product => Product.ProductOrder); 
     //a, b, c 
0

ジェネリックIEnumerableを使用。

なし一般的なIEnumerableは、オブジェクトのコレクションです。それはあなたが列挙可能なのobjectsのすべてを反復することを可能にするメソッドGetEnumerator()を持っています。

IEnumerable<Type>は、基本的に角括弧<Type>で定義されているTypeのコレクションです。これは、GetEnumerator()メソッドを備えています。このメソッドを使用すると、列挙可能な型のすべての型要素を反復処理できます。

キャストする必要がなく、コンテナの種類について常に知っているので、2番目のキャスタを使用することをおすすめします。
も:詳細については

IEnumerable is the base interface for all non-generic collections that can be enumerated. For the generic version of this interface see System.Collections.Generic.IEnumerable. IEnumerable contains a single method, GetEnumerator, which returns an IEnumerator. IEnumerator provides the ability to iterate through the collection by exposing a Current property and MoveNext and Reset methods.

here

0

にあなたはあなたが投稿しエラーを再現しません掲載のコードを参照してください。

代わりに、あなたの実際のコードは、おそらく、この代わりのようになります。

IEnumerable<Product[]> sortedProducts = outputVals.Products.OrderBy(Product => Product.ProductOrder); 

はちょうどあなたが現在掲載されているものに、角括弧を削除して、あなたは大丈夫でしょう。

注:質問の書式を覚えておいてください。質問の意味が大きく変わる可能性があります。タイプパラメータが最初に表示されなかったためです。

関連する問題