2012-05-21 103 views
0

好的,所以我有一個Queue用於我的打印方法。它爲我需要打印的每一行存儲文本和選定的字體。下面的循環應該打印出Queue的內容,但它看起來像peek返回的是對象的值,而不是對象的實際引用。有什麼辦法讓它返回一個引用?Peek方法返回參考對象

 while (reportData.Count > 0 && checkLine(yPosition, e.MarginBounds.Bottom, reportData.Peek().selectedFont.Height)) 
     { 
      ReportLine currentLine = reportData.Peek(); 

      maxCharacters = e.MarginBounds.Width/(int)currentLine.selectedFont.Size; 

      if (currentLine.text.Length > maxCharacters) 
      { 
       e.Graphics.DrawString(currentLine.text.Substring(0, maxCharacters), currentLine.selectedFont, Brushes.Black, xPosition, yPosition); 
       yPosition += currentLine.selectedFont.Height; 
       currentLine.text.Remove(0, maxCharacters); 
      } 
      else 
      { 
       e.Graphics.DrawString(currentLine.text, currentLine.selectedFont, Brushes.Black, xPosition, yPosition); 
       yPosition += currentLine.selectedFont.Height; 
       reportData.Dequeue(); 
      } 
     } 

ReportLine是一個結構,所以它總是按值傳遞,除非另有說明。我不想把它改成一個班,因爲它的唯一目的是保存兩條信息。

[編輯]

這是ReportLine的樣子。這是非常簡單的:

public struct ReportLine 
{ 
    public string text; 
    public Font selectedFont; 
} 
+0

* *正是你的 「對象的值」 意味着什麼 - 什麼ReportLine看起來不一樣?你在觀察什麼? –

+2

生成ReportLine引用類型? – mikalai

回答

3

textstring類型的字段,你希望它通過currentLine.text.Remove(0, maxCharacters);改變。但Remove不修改字符串,它返回一個新的字符串。

嘗試:

currentLine.text = currentLine.text.Remove(0, maxCharacters); 

,並ReportLine引用類型:

public class ReportLine 
{ 
    public string text; 
    public Font selectedFont; 
} 
+0

這對我沒有好處。有什麼方法可以修改隊列中的項目,而不是使用peek方法拉出的項目的副本? – Grungondola

+0

使其引用類型工作。謝謝您的幫助。我現在只需在代碼中更改其他幾個位置,以避免引用類型引起的任何錯誤。 – Grungondola