c# - 如何创建一个获取未知数量值的方法?

标签 c# function return-value subroutine

为了用一个简单的例子来解释这个问题,我们可以这样说:

我有一个方法,取两个数字的平均值:

private double TakeAverage(double n1,double n2) 
{
    average = (number1 + number2) / 2.0000;
    return average;
}

我这样调用它:

textBox3.Text = (TakeAverage(number1, number2)).ToString();

第一季度:

如何使该函数能够运行而无需多次调用,例如:

TakeAverage(number1, number2, number3, number4, number5)  // as wanted number of times...

问题2:如何让这个函数根据它所接受的值的数量改变返回值?

例如

Substring(1) //if it takes just one value, it returns all the chars after first char but
Substring(1,2)//if it takes two values, it returns 2 characters after first char

最佳答案

看看这个:

public double TakeAverage(params double[] numbers)
{
  double result = 0.0;

  if (numbers != null && numbers.Length > 0)
    result = numbers.Average();

  return result;
}

由于 params 允许客户端不发送任何内容,因此我们应该测试 numbers 是否存在并包含项目。

用法:

double average = TakeAverage(1, 2, 3, 4.4);     //2.6
double anotherAverage = TakeAverage();          //0
double yetAnotherAverage = TakeAverage(null);   //0

更新

根据您的评论,我了解到您正在寻找称为重载的东西:您希望给定方法根据其参数表现出不同的行为。

我举一个例子,你必须修改它以满足你的需要。

假设除了我们原来的 TakeAverage 方法之外,我们还需要另一个方法来计算平均值并将其乘以给定的数字。它会是这样的:

public double TakeAverage(int factor, params double[] numbers)
{
  double result = 0.0;

  if (numbers != null && numbers.Length > 0)
    result = numbers.Average() * factor;

  return result;
}

用法:

double average = TakeAverage(1.0, 2, 3, 4.4);     //2.6
double notAnAverage = TakeAverage(1, 2, 3, 4.4);  //3.1333...

请注意,我必须明确指出第一个数字是 double (1.0),否则它将落在第二个重载上并与其相乘。

关于c# - 如何创建一个获取未知数量值的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17322171/

相关文章:

c# - 字符串到当前时间的日期

c# - 加载多个版本的 DLL

swift - 插入函数作为参数

c - 使用函数加载数组元素

python - 从函数中获取特定值

Java:返回两个 "immutable"整数的最佳方式?

c++ - 在 C++ 中返回 std::vector 的有效方法

c# - 在内存中使用 Entity FrameWork Core 和 Sqlite 我得到 "no such table: ControlGroup"错误

c# - 反射。我们可以使用它实现什么?

function - Julia 中局部变量不受支持的 `const` 声明