ListとかDictionaryとかをソートしたい時、OrderByを使う方法があるけど、
なぜかSortができなくて
OrderByが効かなかった間違った使い方
私がやっていたミスはこんな感じ
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
public class OrderBy : MonoBehaviour {
List<int> sample;
void Start () {
sample = new List<int> { 3, 5, 1, 2, 4 };
Print("ソート前:");
sample.OrderBy(it => it);
Print("ソート後:");
}
void Print(string sampleString)
{
foreach (var s in sample)
{
sampleString += s.ToString();
}
Debug.Log(sampleString);
}
}

ソートできてない
でも、Sortだと効く。
void Start () {
sample = new List<int> { 3, 5, 1, 2, 4 };
Print("ソート前:");
sample.Sort();
Print("ソート後:");
}

私の何がいけなかったか、お気づきでしょうか?
OrderByはIOrderedEnumerable<T>を返す
IOrderedEnumerable<T>は、IEnumerable<T>を継承したもの。
OrderByは、IOrderedEnumerable<T>を返すんだよね。
Sortの場合は、インスタンス自信をソートしてくれるけど、
OrderByの場合は、ソートしたものを、返す。
つまり、
sample.Sort();
はOK
OrderByの場合は
var sample2 = sample.OrderBy(it => it);
って、やらなきゃいけない。
ちなみに、ここでのsample2の型はIOrderedEnumerable<int>になってるよ。
上記のミスを正す場合は
List<int> sample = new List<int>{3, 5, 1, 4, 2};
sample = sample.OrderBy(it => it);
ってやればいいけど、ここでエラーが
sample.OrderBy()の返り値はIOrderedEnumerable<int>
List<int>のsampleには代入できないので、List型にキャストしてあげればOK
sample = sample.OrderBy(it => it).ToList();
ってやってあげればオッケー
