为什么 System.Linq.Dynamic.Core OrderBy 不能与 ImmutableArray 一起使用?
Why is System.Linq.Dynamic.Core OrderBy not working with ImmutableArray?
我正在尝试将 System.Linq.Dynamic.Core 与 ImmutableArray 一起用于动态 OrderBy,但出现以下异常:
Expression of type 'System.Collections.Immutable.ImmutableArray`1[$customType]' cannot be used for parameter of type 'System.Collections.Generic.IEnumerable`1[$customType]' of method 'System.Linq.IOrderedEnumerable`1[$customType] OrderByDescending[$customType,Int32](System.Collections.Generic.IEnumerable`1[$customType], System.Func`2[$customType,System.Int32])' (Parameter 'arg0')
这是为什么?他们是否为不可变类型定义了特定的验证? Normal OrderBy 完全有能力对其进行排序。这应该作为功能请求提交给他们,还是我遗漏了一些明显的东西?一旦它被投射到一个列表中,它就像一个魅力。
这似乎是 .Net (Core) 中的错误,特别是在 Expression.Call
的参数验证中。
最终,第一个参数通过调用 TypeUtils.AreReferenceAssignable
进行验证,并且代码假定值类型不能(引用)分配给 non-value 类型,并且 ImmutableArray
是一个值类型,因为它是用 struct
.
实现的
我在 github 上打开了 an issue,看看别人怎么看。
我正在尝试将 System.Linq.Dynamic.Core 与 ImmutableArray 一起用于动态 OrderBy,但出现以下异常:
Expression of type 'System.Collections.Immutable.ImmutableArray`1[$customType]' cannot be used for parameter of type 'System.Collections.Generic.IEnumerable`1[$customType]' of method 'System.Linq.IOrderedEnumerable`1[$customType] OrderByDescending[$customType,Int32](System.Collections.Generic.IEnumerable`1[$customType], System.Func`2[$customType,System.Int32])' (Parameter 'arg0')
这是为什么?他们是否为不可变类型定义了特定的验证? Normal OrderBy 完全有能力对其进行排序。这应该作为功能请求提交给他们,还是我遗漏了一些明显的东西?一旦它被投射到一个列表中,它就像一个魅力。
这似乎是 .Net (Core) 中的错误,特别是在 Expression.Call
的参数验证中。
最终,第一个参数通过调用 TypeUtils.AreReferenceAssignable
进行验证,并且代码假定值类型不能(引用)分配给 non-value 类型,并且 ImmutableArray
是一个值类型,因为它是用 struct
.
我在 github 上打开了 an issue,看看别人怎么看。