class Project
{
public int? id;
public Project(int? iid) { id = iid; }
}
public class Program
{
static void Main(string[] args)
{
List<Project> pros = new List<Project>() { new Project(null), new Project(10), new Project(50), new Project(1), new Project(null) };
var x = new Comparison<Project>((Project r, Project l) =>
{
if (r.id == null && l.id == null)
return 0;
if (r.id == null)
{
return 1;
}
if (l.id == null)
{
return -1;
}
return Math.Sign(r.id.Value - l.id.Value);
});
pros.Sort(x);
Console.ReadLine();
}
}
誰が誰を差し引くか、極性を -1 または 1 に変更して、目的のナンを取得できます。これはナンを最後までプッシュし、最小から最大にソートします。
または、nan をまったく処理したくない場合や、ID でソートしたくない場合は、where ステートメントを使用して、null ID なしで反復子を取得します。
var nonulls = pros.Where(pr => (pr.id != null));
これは、null のないセットとして遅延評価し、実際には中間体を保存しないため、ストレージの問題について心配する必要はありません。O(N)、オーバーヘッドはほとんどまたはまったくありません。