2017-10-05 48 views
0

我想添加一個數字到字符串的末尾。將增加的數字添加到字符串

例如。

john1

beth2

mike3

mary4​​

class finalName 
{ 
    public string name(string initialName) 
     { 
     string finalName = string.Empty; 
     for (int i = 1; i < 10; i++) 
     { 
      finalName = initialName + i.ToString("0");      
     } 
     return finalName; 
    } 
} 

finalName name = new finalName(); 

,我得到的結果是:

jonh9

beth9

mike9

mary9

我在做什麼錯?

+0

你是循環完成後返回。在循環結束時,你將擁有i = 9,這就是你得到這種行爲的原因。你能分享你如何調用這個方法嗎? –

+0

@ChetanRanpariya我編輯添加類。這些名字來自一個文本文件。我第一次複製時錯過了它。 – imsohappy

+0

讓我重新說明我的問題 - 誰調用了'code.ame'方法?你能分享從文件中讀取名字的代碼並調用這個方法嗎? –

回答

1

你只是在方法內部循環,並返回一個值。

如果你想添加一個遞增數函數的每次調用,然後添加此counter爲您的類中的字段,並把它添加到字符串:

int counter = 1; 
public string name(string initialName) 
{ 
    return initialName + counter++; 
} 

如果要創建一個新的實例每調用,則變量應作出static

static int counter = 1; 
public string name(string initialName) 
{ 
    return initialName + counter++; 
} 

如果你想在字符串的函數列表發送並取回用遞增的數字列表,那麼你應該先更改簽名以獲得收集和返回一個集合:

public IEnumerable<string> name(IEnumerable<string> names) 
{ 
    return names.Select((s,i) => s+(i+1));  
} 
+0

我試過第一個。它沒有工作... – imsohappy

+0

嗯,我不熟悉你的代碼,但如果你每次創建一個新的實例,它不會工作。您必須將該字段更改爲「靜態」或繼續使用相同的實例 –

+0

不客氣。爲什麼downvote? –

1

您應該從name函數中刪除for循環。 你的循環總是i等於9結束,結果總是initialName + 9

我認爲你需要像這樣:

string[] names = new string[] { "john", "beth", "mike", "mary" }; 

for (int i = 0; i < names.Length; i++) 
{ 
    names[i] = names[i] + (i + 1).ToString(); 
} 
3

要做到這一點,需要一個名稱的集合被修改你的方法是什麼,然後修改那些遞增索引:

public static IEnumerable<string> ModifyNames(IEnumerable<string> names) 
{ 
    int index = 1; 

    foreach (string name in names) 
    { 
     yield return name + index; 
     index++; 
    } 
} 

小提琴here

+0

這一個也適用。謝謝你的幫助! – imsohappy