2010-04-24 74 views

回答

1

除了肖恩富尔默提供,您还可以使用params关键字有一个函数,采用可变数量的参数选项:如果你想

public int Sum(params int[] values) 
{ 
    int sum = 0; 
    for(int i = 0; i < values.Length; i++){ 
     sum+=values[i]; 
    } 
    return sum; 
} 

int answer2Parameters = Sum(1, 5); 
int answer3Parameters = Sum(1, 2, 3); 
int answer4Parameters = Sum(1, 3, 5, 6); 

当然要限制他们确切地两个或三个,那么你可能想在C#4.0中查看可选参数或重载Sum函数 - 我的意思是创建两个Sum函数,一个需要两个参数,另一个需要3个参数。

public int Sum(int valueA, int valueB) { 
    int summ = valueA + valueB; 
    return summ; 
} 

public int Sum(int valueA, int valueB, int valueC) { 
    int summ = valueA + valueB + valueC; 
    return summ; 
} 
+0

以及如何同时使用ints []和字符串[]?以及如何指定数组中的值的名称? – Rella 2010-04-24 16:23:46

+0

@ Ole有许多方法可以做到这一点,但根据您的要求,最好的设计可能会有所不同。您是否期望您将发送int或字符串“数字”,或者您是否希望此方法能够将ints和concatenate字符串相加?如果第二个选项是您正在查找的内容,那么使用两个方法称为用于整数的Sum和另一个称为用于字符串的Concatenate更合理。另一方面,如果您正在寻找Sum整数或字符串数​​字,则可以创建对象数组或重载该方法。 – 2010-04-24 17:49:39

+0

@Ole还指定数组中的值的名称是什么意思?该方法的参数被添加到名为values的数组参数中。值[0]具有第一个参数值[1]具有第二个参数,依此类推。如果需要,可以手动将它们从方法代码中的数组中分离出来。 – 2010-04-24 17:51:25

4

您可以在C#4.0中使用optional arguments来完成此操作。 如果您使用的是C#4.0之前的版本,则可以创建一个重载函数,该函数使用默认值调用您的函数。

3

如果您使用的是.NET 3.5或更早版本,则可以使用Nullable Types

public int Sum(int valueA, int valueB, int? valueC) 
{ 
    int sum = valueA + valueB; 
    if (valueC.HasValue) 
    { 
     sum += valueC.Value; 
    } 

    return sum; 
} 

的呼声是:

int answer1 = Sum(1, 2, 3); // = 6 

int answer2 = Sum(1, 2, null); // = 3 

当然经典的方式做到这一点是使用方法重载:如果你希望能够使用string作为

public int Sum(int valueA, int valueB) 
{ 
    int sum = valueA + valueB; 
    return sum; 
} 

public int Sum(int valueA, int valueB, int valueC) 
{ 
    int sum = valueA + valueB + valueC; 
    return sum; 
} 

int answer1 = Sum(1, 2); 
int answer2 = Sum(1, 2, 3); 

以及int移动到.NET4或创建另一对重载方法:

public int Sum(string valueA, string valueB) 
{ 
    // Convert the strings to int and call the previous code 
    // You will need to cope with the case when the strings don't represent numbers 
} 

public int Sum(string valueA, string valueB, string valueC) 
{ 
    ... 
} 

如果你想应对混合stringint那么你将需要更多的重载 - 这可能是矫枉过正。

+0

以及如何使它与字符串一起工作? – Rella 2010-04-24 16:09:24

+0

@Ole - 'string'而不是'int'还是'int'? – ChrisF 2010-04-24 16:10:13

+0

以及int。 – Rella 2010-04-24 16:16:57