2017-05-30 38 views
-5

問題:我有一個方法是更多的32個結果。在C中只顯示32條結果#

我曾嘗試以下:

<% 
int i1; 
string desc = ""; 
for (i1 = 1; i1 <= 32; i1++){ 
    if ("PCDDC" + i1.ToString() != "") { 
     desc += "<BR>" + "PCDDC_Description" + i1.ToString(); 
     Response.Write(desc.Remove(0,6)); 
    } 
} 
%> 

我得到了32結果,當我顯示的字符串。我不知道爲什麼。

+1

'「PCDDC」+ i1.ToString()!=「」'這將永遠是真的...... 5 +任何東西!= 0 – MrZander

+0

@MrZander:它仍然會顯示32個以上的結果。是的,我已刪除該聲明,它仍然顯示超過32個結果 –

+0

我只是指出無用的if語句。 – MrZander

回答

4

您將所需的輸出連接到一個臨時變量,然後輸出它。

將其從desc += "<BR...更改爲desc = "<BR...

其他問題:

  • i1變量具有for循環之外沒有用,所以移動在線聲明:for(int i1 = 1; i1 <= 32; i1++) {
  • "<BR>"沒有與現今的HTML慣例保持一致。我們使用小寫標籤,如果您想要與XHTML和XML兼容,請使用<br />
  • 正如其他人指出的那樣,您的if語句的表達式始終評估爲false
  • String變異操作(連接,Substring,Remove等)通常很貴(因爲它們涉及分配一個新字符串),應該避免在高性能代碼中使用。在你的情況下,撥打desc.Remove(0,6)是不必要的,因爲你可以直接輸出字符串。
  • 它看起來像你在一個渲染功能塊(<% %>)內寫入HTML。您的代碼可能會更容易,如果你把所有的HTML作爲文字代替,像這樣閱讀:

    <% for(int i = 1; i <= 32; i++) { %> 
    PCDC_Description<%: i %><br /> 
    <% } %> 
    
  • 假設你正在使用ASP.NET 4.0或更高版本,你應該使用<%:,而不是<%=<% Response.Write(因爲它自動執行字符串的HTML編碼,這對於避免各種注入攻擊(如XSS)至關重要。

0

這是因爲你總是附加到desc,並在每次迭代中打印它。這會導致第一項打印32次,如下所示:1 1 2 1 2 3 1 2 3 4 etc...。只需將desc +=替換爲desc =,此問題將消失。

雖然大部分的代碼仍然是無稽之談。例如:if ("PCDDC1" != "")將始終爲真,因此請輸入該塊。

2

首先,讓我們來看看它得到了編輯之前在你粘貼輸出(與我的一個小格式):

86644 
86644, 86645 
86644, 86645, 86664 
86644, 86645, 86664, 86663 
86644, 86645, 86664, 86663, 86777 

你看到的模式?你正在添加一個,然後再打印整個過程。

考慮到這一點,讓我們也看看代碼:

if ("PCDDC" + i1.ToString() != "") { 

if聲明將永遠是true

desc += "<BR>" + "PCDDC_Description" + i1.ToString(); 

您正在將i1.ToString()轉換爲字符串文字。這不會與您粘貼的輸出開始,但它確實表明您將輸出添加到此單個desc變量。這意味着兩件事:不要在環路中打印輸出,並且在應該時不使用StringBuilder

Response.Write(desc.Remove(0,6)); 

然後你就修改它的一些未知的原因後,輸出的for循環內的字符串。