获取列表中大于所选项目的项目
Get items in a list that are greater than a selected item
我有一个列表 Versions
。
List<Version> versions = GetVersions();
我有一个 selectedVersion
.
我的 Version
class 实施 IComparable
.
public class Version : IComparable<Version>
所以我可以versions.Sort()
。此时我的 Version
对象在列表中按 Name
属性.
排序
从 Versions
的列表中,我想要获得比我的 selectedVersion
更高的项目。我如何使用 Linq 做到这一点?
我尝试将 selectedVersion
转换为 IComparable
,然后使用 CompareTo
,但出现 InvalidCastException
错误。
IComparable comparable = (IComparable)selectedVersion;
if(comparable.CompareTo(selectedVersion)) > 0
您似乎实现了 IComparable<T>
,这与 IComparable
不同。也可以实施 IComparable
或转换为 IComparable<Version>
,您应该能够做您想做的事情。
versions.Where(x => x.CompareTo(selectedVersion) > 0).ToList();
或者如果 IComparable<Version>
是显式实现的:
versions.Where(x => (x as IComparable<Version>).CompareTo(selectedVersion) > 0).ToList();
正确的方法是使用 Comparer<T>.Default
,只要类型 T
实现 IComparable<T>
或 IComparable
:
,它就会起作用
var result = versions
.Where(version => Comparer<Version>.Default.Compare(version, selectedVersion) > 0)
.ToList();
您甚至可以将其封装在自定义扩展方法中(因此您 DRY):
public static class EnumerableExtensions
{
public static IEnumerable<T> GreaterThan<T>(this IEnumerable<T> source, T value, IComparer<T> comparer = null)
{
if (comparer == null) comparer = Comparer<T>.Default;
return source.Where(item => comparer.Compare(item, value) > 0);
}
}
并简单地使用
var result = versions.GreaterThan(selectedVersion).ToList();
我有一个列表 Versions
。
List<Version> versions = GetVersions();
我有一个 selectedVersion
.
我的 Version
class 实施 IComparable
.
public class Version : IComparable<Version>
所以我可以versions.Sort()
。此时我的 Version
对象在列表中按 Name
属性.
从 Versions
的列表中,我想要获得比我的 selectedVersion
更高的项目。我如何使用 Linq 做到这一点?
我尝试将 selectedVersion
转换为 IComparable
,然后使用 CompareTo
,但出现 InvalidCastException
错误。
IComparable comparable = (IComparable)selectedVersion;
if(comparable.CompareTo(selectedVersion)) > 0
您似乎实现了 IComparable<T>
,这与 IComparable
不同。也可以实施 IComparable
或转换为 IComparable<Version>
,您应该能够做您想做的事情。
versions.Where(x => x.CompareTo(selectedVersion) > 0).ToList();
或者如果 IComparable<Version>
是显式实现的:
versions.Where(x => (x as IComparable<Version>).CompareTo(selectedVersion) > 0).ToList();
正确的方法是使用 Comparer<T>.Default
,只要类型 T
实现 IComparable<T>
或 IComparable
:
var result = versions
.Where(version => Comparer<Version>.Default.Compare(version, selectedVersion) > 0)
.ToList();
您甚至可以将其封装在自定义扩展方法中(因此您 DRY):
public static class EnumerableExtensions
{
public static IEnumerable<T> GreaterThan<T>(this IEnumerable<T> source, T value, IComparer<T> comparer = null)
{
if (comparer == null) comparer = Comparer<T>.Default;
return source.Where(item => comparer.Compare(item, value) > 0);
}
}
并简单地使用
var result = versions.GreaterThan(selectedVersion).ToList();