如何生成一个取未知值的方法
本文关键字:未知 方法 一个 何生成 | 更新日期: 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...
注意,我必须明确地说,第一个数字是double
(1.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