3

XElement私はC#でオブジェクトのリストを持っています。index各 XElement オブジェクトには、次のような属性があります。

<A index="2" .... ></A>
<B index="4" .....></B>
...
.. 

ここで、これらの要素をインデックス値に従って昇順に並べ替えたいと思います。このために私は試しました:

 listOfElement.OrderBy(e => e.Attribute("index").Value);

しかし、要素はリストでソートされていません。ここで何が間違っていますか?

4

2 に答える 2

4

まず、値を int にキャストしていません。この場合は無害ですが、次のことを実行することをお勧めします。

e => (int)e.Attribute("index")

第二に、OrderByは操作対象の型に副作用を与えませんが、 new を返しますIEnumerable<T>。次のように記述して、以前のリストを上書きできます。

 listOfElement = listOfElement.OrderBy(e => (int)e.Attribute("index")).
                     ToList();

List<T>.Sort(Comparison<XElement>)または、次の方法でメソッドを使用できます。

listOfElement.Sort((e1, e2) => 
            (int)e1.Attribute("index") - (int)e2.Attribute("index"));
于 2013-01-05T07:15:48.410 に答える
1
IEnumerable<XElement> sortShows = from s in listOfElement.Descendants()
                                  orderby (int)s.Attribute("index")
                                  select s;

これを試してみてください。

于 2013-01-05T07:26:35.847 に答える