Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在源代码上使用标准实现LINQ min_C#_Linq - Fatal编程技术网

C# 在源代码上使用标准实现LINQ min

C# 在源代码上使用标准实现LINQ min,c#,linq,C#,Linq,如果我想获得集合的min类型,为一个包含大量变量和字段的复杂类应用一些类值标准,这是无法直接完成的 最接近的尝试是: public static TSource Min<TSource>(this IEnumerable<TSource> source); 但是对于具有许多字段的类型,没有实现,例如:返回确定字段的值最小的特定类型。例如,从Vector3集合中,具有最小z的集合 最接近的解决方法是为Vector3类型返回如下类型的集合: 我发现这很奇怪,因为我发现源类型

如果我想获得集合的min类型,为一个包含大量变量和字段的复杂类应用一些类值标准,这是无法直接完成的

最接近的尝试是:

public static TSource Min<TSource>(this IEnumerable<TSource> source);
但是对于具有许多字段的类型,没有实现,例如:返回确定字段的值最小的特定类型。例如,从Vector3集合中,具有最小z的集合

最接近的解决方法是为Vector3类型返回如下类型的集合:


我发现这很奇怪,因为我发现源类型返回的条件在已确定的类字段类型中,或者使用任何其他谓词应用逻辑检查类值本身非常方便。对此有什么解释吗?

LINQ中有一个可枚举的.Min实现返回TSource。它要求类在您的情况下实现IComparable或旧的普通IComparable。在方法比较中,您必须提供可用于确定类的任意两个实例之间关系的代码。此方法必须提供稳定的结果。

MoreLinq有MinBy。但是OrderBy解决方案适用于包括IQueryables在内的大多数场景,因此实际上不需要内置MinBy。很多东西都很方便。添加一些容易与其他内容组合的内容可能会导致隐藏更多有用的功能。这是一个艰难的平衡。@rustyBucketBay你试过MinBy吗?C不能凭空挑选一个字段来比较类。它不是凭空挑选一个字段——OP希望它根据z值进行选择。明比做得很好。
public static void MaxEx3()
{
    Pet[] pets = { new Pet { Name="Barley", Age=8 },
                   new Pet { Name="Boots", Age=4 },
                   new Pet { Name="Whiskers", Age=1 } };

    Pet max = pets.Max();

    Console.WriteLine(
        "The 'maximum' animal is {0}.",
        max.Name);
}

/*
 This code produces the following output:

 The 'maximum' animal is Barley.
*/
OrderBy( vector => vector.z).Take(1).ToList();