为了解释一个简单例子的问题,让我们说:
我有一个方法,它取两个数字的平均值:
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
答案 0 :(得分: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
),否则它会落在第二个重载上并乘以它。
答案 1 :(得分:1)
有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;
}
答案 2 :(得分:1)
回应你的子串函数问题。
如果指定一个参数,例如子字符串(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