鉴于这三种相似的方法,我们如何将它们浓缩为一个方法?

时间:2018-07-18 03:34:39

标签: c#

public int Add2(int a, int b) => a + b;
public int Add3(int a, int b, int c) => a + b + c;
public int Add4 (int a,int b,int c,int d) => a + b + c + d;

我们如何在一个方法下编写这些方法?

4 个答案:

答案 0 :(得分:12)

在添加方法中使用params int[],然后您可以添加任意数量的数字。

类似的东西:

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine(Add(1, 2, 3, 4, 5));      
    }

    public static int Add(params int[] numbers) 
    {
        int sum = 0;
        foreach (int n in numbers)
        {
            sum += n;
        }

        return sum;
    }
}

结果:

15

Fiddle Demo

增强

使用Linq,代码变得更短

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        Console.WriteLine(Add(1, 2, 3, 4, 5));      
    }

    public static int Add(params int[] numbers) 
    {
        return numbers.Sum();
    }
}

结果:

15

Fiddle Demo

答案 1 :(得分:3)

尝试使用可选参数。

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments#optional-arguments

编写方法A
Add (int a, int b, int c = 0, int d = 0) { }

然后根据在c和d参数中传递的值进行计算。

答案 2 :(得分:1)

ab始终在三个函数中使用。这些值在您的功能中是必需的。并非总是使用值cd。如果要合并所有功能,只需给这些值提供默认值即可。

public int Add(int a, int b, int c = 0, int d = 0){
    return a + b + c + d;
}

答案 3 :(得分:1)

Func和(也)Linq一起玩。.)

static Func<int[], int> Add = ((i) => i.Sum());

public static void Main()
{
    Console.WriteLine(Add.Invoke(new[] {1,2,3,4,5}));

    Console.WriteLine(Add.Invoke(new[] {8}));

    Console.WriteLine(Add.Invoke(new[] {-2, -4, 6}));
}

//15
//8
//0