2014-02-14 25 views
0

我正在寫的String.format擴展的String.format不追加給定的ARGS

我的分機(我已經沒有任何問題之前完成。):

public static string FormatWith(this string source, params object[] args) { 
     source.ThrowIfNull("source"); 

     return string.Format(source, args); 
    } 

我的測試:

[TestMethod] 
    public void FormatWith_ShouldReturnCorrectResult_FromValidArgs() { 
     var expected = "testing 123"; 
     var actual = "test".FormatWith("ing", " ", 123); 

     Assert.AreEqual(expected, actual); 
    } 

在我的測試中,調用FormatWith之後,實際應該是「測試123」,但它只是「測試」。

我測試的消息:

Assert.AreEqual failed. Expected:<testing123>. Actual:<test>. 

我已經試過路過不是字符串等各類成擴展,但結果不變。我確定source.ThrowIfNull不會引發異常。

那麼是什麼給?我可以忽略一些東西嗎一個很好的答案會告訴我一個FormatWith的工作實現,同時解釋爲什麼我的實現不起作用。

編輯:我是個白癡,完全忘了{0},{1} ...我每天都會使用它。定時器啓動時將接受第一個答案。多謝你們。

+2

'String.Format'需要標記,如'{0它是格式字符串。看起來你只是想追加,所以使用'+'或者'Join'。哦,[文檔](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCkQFjAA&url=http%3A%2F%2Fmsdn.microsoft.com%2Fen-我們%2Flibrary%2Fsystem.string.format(v%的3Dvs.110)的.aspx&EI = HOX-UuvsLIqa2AW5g4DQBA&USG = AFQjCNGVlOAX1XvVPeQrzDqOQ4KNQMZ1AA&SIG2 = cYA7yJvLsfAoo8smw3D0gA&BVM = bv.61535280,d.b2I) – crashmstr

+1

順便說一句,與爲什麼擴展方法麻煩?爲什麼不按照它的意圖使用String.Format()? String.Format(「test {0} {1}」,「ing」,「123」)? – Scott

+0

我更喜歡擴展的語法。 strSomething.FormatWith(1,2)比string.Format(strSomething,1,2)漂亮。 –

回答

9

我不是一個.NET的傢伙,但我可以閱讀API文檔:http://www.dotnetperls.com/string-format

如果我沒有記錯的話,你的源字符串需要你的論點明確添加到字符串。

var actual = "test{0}{1}{2}".FormatWith("ing", " ", 123); 

隨時糾正我的.NET人。

+4

_Read API文檔_這是什麼新的惡魔?!?! (很好地完成) – agentnega

+2

閱讀文檔! (動物) – pllee

4

您正在尋找String.ConcatString.Format並不像that.Only工作,如果你指定這樣的論點:

string.Format("{0}, {1} ....",source,args); 

,你不能因爲你不知道arguments.So的數量,您可以使用String.ConcatString.Join代替。

0

而不是修改功能的使用其他一些人認爲,這裏的FormatWith的實現所需的目的,將工作:

public static string FormatWith(this string source, params object[] args) 
{ 
    var arguments = new List<object> {source}; 
    arguments.AddRange(args); 

    return String.Concat(arguments); 
} 
+0

幸運的是沒有使用我的擴展,所以我可以正確使用string.format。儘管如此,謝謝你的其他選擇。 –

+0

謹慎解釋downvote? – Scott

+0

我不是那個倒下的人。但再看一遍,你的實現不會像格式那樣工作,這是我真正想要的。在你的防守中,這個問題確實讓我看起來像是試圖連接而不是格式。 –