私は昨日、メソッドに取り組んでいて、奇妙なことに遭遇しました。ここでは、コードのバージョンが間違っています:基本的に問題は、OrderByがBar.PopulateListメソッドが持続しません。メソッドにオブジェクトを渡して、そのオブジェクトに対してextendstionメソッドを呼び出す
class Foo
{
List MyObjects;
public void PopulateMyObjects()
{
//Items are added to my list but the OrderBy is not persisting.
Bar.PopulateList(MyObjects);
}
}
class Bar
{
public static int PopulateList(List theList)
{
foreach(var in WebSerbiceCall)
{
theList.Add(var);
}
// the OrderBy call only sorts 'theList' in the context of this method.
// When I return from this method theList has been populated but the Ordering has
// reverted back to the order that the items were added to the list.
theList.OrderBy(obj => obj.ID);
return theList.Count;
}
}
今私は、コードを更新してすべての作品下記のとおり、REFキーワードを追加した場合: 例えばパブリック静的int PopulateList(refリストをリスト) とBar.PopulateList(ref MyObjects);
誰でも私を啓発できますか?オブジェクトは常にrefによって渡されたと思った? OrderByが拡張メソッドであることは事実ですか?ここでの問題はOrderBy
コールが実際にしないことです
return theList.OrderBy(obj => obj.ID).Count;
(私は、について説明を追加するつもりだったが、@jaredParがそれを説明しています)
私はあまりにも思ったので、私はしようとしました:theList = thisList.OrderBy(obj => obj.ID).ToList();下のMatthewに言及されているように、それはどちらもうまくいきませんでした。また、refキーワードを追加するのはなぜですか? – CianM
@CianM 'theList'が' out'または 'ref'パラメータでないとまだ動作しません。それがなければ、メソッド内の参照のコピーを変更するだけです。 – JaredPar
ありがとう!私は今理解しています、これで混乱している人のために、私は美しい写真で素晴らしい記事を見つけました:http://rapidapplicationdevelopment.blogspot.com/2007/01/parameter-passing-in-c.html – CianM