2

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

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

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
4

3 回答 3

3

看一下这个:

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),否则它将落在第二个重载上并将其相乘。

于 2013-06-26T14:06:46.073 回答
1

params-keyword 中,您可以说您采用未指定数量的参数。

来自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;
}
于 2013-06-26T14:00:46.573 回答
1

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

如果您指定一个参数,例如 sub string(5),它将返回字符串中第 5 个字符之后的所有字符。如果我有字符串“elephant”,它将返回“ant”。

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

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

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

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

见这里: http: //msdn.microsoft.com/en-us/library/system.string.substring (v=vs.71).aspx

于 2013-06-26T14:30:16.923 回答