在C#中有一种方法来find最多的3个数字?

像Math.Max,但需要3或int的参数?

谢谢

那么,你可以调用它两次:

int max3 = Math.Max(x, Math.Max(y, z)); 

如果你发现自己做了很多事情,你总是可以写自己的帮手方法……我很高兴在代码库中看到这个,但不是经常的。

(请注意,这可能比Andrew基于LINQ的答案更有效 – 但显然LINQ方法更吸引人的元素越多。)

编辑:“两全其美”方法可能是有一个自定义的方法集:

 public static class MoreMath { // This method only exists for consistency, so you can *always* call // MoreMath.Max instead of alternating between MoreMath.Max and Math.Max // depending on your argument count. public static int Max(int x, int y) { return Math.Max(x, y); } public static int Max(int x, int y, int z) { // Or inline it as x < y ? (y < z ? z : y) : (x < z ? z : x); // Time it before micro-optimizing though! return Math.Max(x, Math.Max(y, z)); } public static int Max(int w, int x, int y, int z) { return Math.Max(w, Math.Max(x, Math.Max(y, z))); } public static int Max(params int[] values) { return Enumerable.Max(values); } } 

这样你就可以写入MoreMath.Max(1, 2, 3)或者MoreMath.Max(1, 2, 3, 4)而不需要创build数组的开销,但是仍然可以写成MoreMath.Max(1, 2, 3, 4, 5, 6) ,当你不介意开销时,可读性和一致性都很好。

我个人发现,比LINQ方法的显式数组创build更可读。

你可以使用Enumerable.Max

 new [] { 1, 2, 3 }.Max(); 

Linq有一个Max函数。

如果你有一个IEnumerable<int>你可以直接调用它,但是如果你需要在不同的参数中,你可以创build一个如下的函数:

 using System.Linq; ... static int Max(params int[] numbers) { return numbers.Max(); } 

那么你可以这样调用它: max(1, 6, 2) ,它允许任意数量的参数。

作为通用的

  public static T Min<T>(params T[] values) { return values.Min(); } public static T Max<T>(params T[] values) { return values.Max(); } 

closures主题,但这里是中间价值的公式,以防万一有人在寻找它

 Math.Min(Math.Min(Math.Max(x,y), Math.Max(y,z)), Math.Max(x,z)); 

假设你有一个List<int> intList = new List<int>{1,2,3}如果你想得到一个最大值你可以做

 int maxValue = intList.Max(); 

如果无论出于何种原因(例如Space Engineers API),System.array没有Max的定义,也没有访问Enumerable的解决scheme,则n值为Max(或Min)的解决scheme是:

 public int Max(int[] values) { if(values.Length < 1) { return 0; } if(values.Length < 2) { return values[0]; } if(values.Length < 3) { return Math.Max(values[0], values[1]); } int runningMax = values[0]; for(int i=1; i<values.Length - 1; i++) { runningMax = Math.Max(runningMax, values[i]); } return runningMax; }