C# 如何使用Linq和或Sort处理对象列表排序?

C# 如何使用Linq和或Sort处理对象列表排序?,c#,linq,sorting,object,C#,Linq,Sorting,Object,对不起,如果这是重复的。我很难找到答案,因为有太多人问我如何在搜索结果中对列表进行排序 假设我有这样的财产: public List<object> Hello { get; set; } public List Hello{get;set;} 假设列表中的每个元素都具有相同的可为null的基元数据类型 那么每个元素都是int?或者每个元素都是十进制的?或者每个元素都是DateTime?,等等 如果调用此列表上的排序或排序依据,会发生什么情况?它是根据每个元素的基础类型排序,还是

对不起,如果这是重复的。我很难找到答案,因为有太多人问我如何在搜索结果中对列表进行排序

假设我有这样的财产:

public List<object> Hello { get; set; }
public List Hello{get;set;}
假设列表中的每个元素都具有相同的可为null的基元数据类型

那么每个元素都是int?或者每个元素都是十进制的?或者每个元素都是DateTime?,等等

如果调用此列表上的排序或排序依据,会发生什么情况?它是根据每个元素的基础类型排序,还是按属性的字符串值排序

让我们检查一下:


现在,LINQ接受int32并尝试与object进行比较。然后再次失败。由于int32 type对于
List.Sort()
,没有方法
CompareTo(object)

,请参阅:此方法使用默认的comparer comparer.default For type T来确定列表元素的顺序。默认属性检查类型T是否实现IComparable泛型接口,并使用该实现(如果可用)。如果不是,Comparer.Default将检查类型T是否实现IComparable接口。如果类型T没有实现这两个接口,Comparer.Default会抛出一个InvalidOperationException。这不是我要问的,但是Ok。只是请求mods删除这个问题,然后找到我自己..不,当列表包含多个类型时会发生这种情况。但是@user2326106,看看你自己?我认为dbc的评论说明了一切。
System.ArgumentException: Value does not fall within the expected range.
  at System.String.CompareTo (System.Object value) [0x00000] in <filename unknown>:0 
  at System.Collections.Generic.Comparer`1+DefaultComparer[System.Object].Compare (System.Object x, System.Object y) [0x00000] in <filename unknown>:0 
  at System.Linq.SortSequenceContext`2[System.Object,System.Object].Compare (Int32 first_index, Int32 second_index) [0x00000] in <filename unknown>:0 
  at System.Array.qsort[Int32] (System.Int32[] keys, Int32 low0, Int32 high0, IComparer`1 comparer) [0x00000] in <filename unknown>:0 
  at System.Array.SortImpl[Int32] (System.Int32[] keys, Int32 index, Int32 length, IComparer`1 comparer) [0x00000] in <filename unknown>:0 
  at System.Array.Sort[Int32] (System.Int32[] array, IComparer`1 comparer) [0x00000] in <filename unknown>:0 
  at System.Linq.QuickSort`1[System.Object].PerformSort () [0x00000] in <filename unknown>:0 
  at System.Linq.QuickSort`1+<Sort>c__Iterator0[System.Object].MoveNext () [0x00000] in <filename unknown>:0 
  at System.Collections.Generic.List`1[System.Object]..ctor (IEnumerable`1 collection) [0x00000] in <filename unknown>:0 
  at System.Linq.Enumerable.ToList[Object] (IEnumerable`1 source) [0x00000] in <filename unknown>:0 
  at Test.Main () [0x00000] in <filename unknown>:0 
System.ArgumentException: Object must be of type Int32.
  at System.Int32.CompareTo (System.Object value) [0x00000] in <filename unknown>:0 
  at System.Collections.Generic.Comparer`1+DefaultComparer[System.Object].Compare (System.Object x, System.Object y) [0x00000] in <filename unknown>:0 
  at System.Linq.SortSequenceContext`2[System.Object,System.Object].Compare (Int32 first_index, Int32 second_index) [0x00000] in <filename unknown>:0 
  at System.Array.qsort[Int32] (System.Int32[] keys, Int32 low0, Int32 high0, IComparer`1 comparer) [0x00000] in <filename unknown>:0 
  at System.Array.SortImpl[Int32] (System.Int32[] keys, Int32 index, Int32 length, IComparer`1 comparer) [0x00000] in <filename unknown>:0 
  at System.Array.Sort[Int32] (System.Int32[] array, IComparer`1 comparer) [0x00000] in <filename unknown>:0 
  at System.Linq.QuickSort`1[System.Object].PerformSort () [0x00000] in <filename unknown>:0 
  at System.Linq.QuickSort`1+<Sort>c__Iterator0[System.Object].MoveNext () [0x00000] in <filename unknown>:0 
  at System.Collections.Generic.List`1[System.Object]..ctor (IEnumerable`1 collection) [0x00000] in <filename unknown>:0 
  at System.Linq.Enumerable.ToList[Object] (IEnumerable`1 source) [0x00000] in <filename unknown>:0 
  at Test.Main () [0x00000] in <filename unknown>:0