2012-03-28 21 views
0
foreach (var book in query) 
{ 
    Response.Write(book.Title); 
    foreach (var author in book.Authors) 
    { 
     Response.Write(" , "+author.FirstName +" "+ author.MiddleInitial + 
     " "+ author.LastName); 
    } 
} 

現在我正在打印書名:所有作者姓名都帶有「,」。 (如果他們有不止一個作者用「,」(done)分隔每個作者,並且向最後作者姓名加上「AND」 - 如果他們沒有多於一個作者no 」,是必需的。如何正確格式化來自循環的值

我怎樣才能做到這一點?

+4

這似乎是功課。請讓我們知道您已經嘗試了些什麼,您認爲您應該如何解決問題,我們很樂意提供幫助。但是,我們不會只爲你做功課。 – Randolpho 2012-03-28 14:17:19

+1

_「如何正確...」_ - 通過__not__使用Response.Write()' – 2012-03-28 14:20:14

+1

@Randolpho:「我們不會只爲你做功課」 - 事實證明是錯誤的... – 2012-03-28 14:39:27

回答

2

你會首先構建字符串,然後將其寫入到屏幕上循環之外的更好,我會建議使用此一StringBuilder

要使用StringBuilder類,您需要導入System.Text名稱空間:

using System.Text; 

這裏是一些示例代碼來演示:

var builder = new StringBuilder(); 

foreach (var author in book.Authors) 
{ 
    //if the string already contains data append a comma 
    if (builder.Length > 0) 
     builder.Append(", "); 

    //append the author to the string 
    builder.AppendFormat("{0} {1} {2}", author.FirstName, author.MiddleInitial, author.LastName); 
} 

Response.Write(builder.ToString()); 
+0

Builder.Length在這裏始終爲0。 – SmilingLily 2012-03-28 14:32:58

+0

我不這麼認爲。在循環的第一次運行中它只會是0。在追加第一個作者之後,在下一次迭代中'builder.Length'將會大於零。 – 2012-03-28 14:39:24

+0

作者和構建者之間的關係在哪裏?當我添加上面的代碼時,構建器根本不打印任何名稱。 – SmilingLily 2012-03-28 14:43:00

1

使用string.Join爲字符串與分離器相結合。

var authors = string.Join(", ", book.Authors.Select(author=>string.Format("{0} {1} {2}", author.FirstName, author.MiddleInitial, author.LastName))); 
Response.Write(authors);