2010-04-24 31 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

相關問題