如何生成一个取未知值的方法

本文关键字:未知 方法 一个 何生成 | 更新日期: 2023-09-27 18:20:03

要在一个简单的例子中解释这个问题,我们假设:

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

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

我称之为:

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

Q1:

如何使该函数能够在不多次调用的情况下运行,如:

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

Q2:如何使这个函数通过它所取的值的数量来改变返回值?

例如

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...

注意,我必须明确地说,第一个数字是double1.0),否则它会落在第二个重载上并乘以它。

有一个params-关键字,您可以说您接受了未指定数量的参数。

来自MSDN

params关键字允许您指定一个方法参数,该参数采用可变数量的参数。

可以发送参数声明中指定类型的参数的逗号分隔列表,也可以发送指定类型的自变量数组。您也可以不发送任何参数。

方法声明中的params关键字之后不允许有其他参数,并且方法声明中只允许有一个params关键字。

示例:

private double TakeAverage(params double[] numbers) 
{
     double average = 0.0;
     if(numbers != null && numbers.Length > 0){
     foreach(double d in numbers)
          average += d;
     average /= numbers.Length;
     }
     return average;
}

回答您的子字符串函数问题。

如果指定一个参数,例如子字符串(5),它将返回字符串中第5个字符之后的所有字符。如果我有字符串"大象",它会返回"蚂蚁"。

如果我向函数添加第二个参数,它将从第一个给定的参数开始,如上所述,并在停止之前持续x个字符。如果我们使用上面的示例字符串"大象"并执行子字符串(5,1),它将返回"a"。

(解决这个问题的一个好方法是将两个数字相加,这将是字符串中的最后一个字符!)

我要求它从给定字符串的第5个字符开始创建一个新字符串,并使我的新字符串为1个字符长。

这是因为字符串类重载了子字符串方法。

请参见此处:http://msdn.microsoft.com/en-us/library/system.string.substring(v=vs.71).aspx