我正在做一個類的重構,並想在一個單獨的方法中移動100行。就像這樣:一次性對象作爲方法的參數參數
using iTextSharp.text;
using iTextSharp.text.pdf;
class Program
{
private static void Main(string[] args)
{
Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35);
using (var mem = new MemoryStream())
{
using (PdfWriter wri = PdfWriter.GetInstance(doc, mem))
{
doc.Open();
AddContent(ref doc, ref wri);
doc.Close();
File.WriteAllBytes(@"C:\testpdf.pdf", mem.ToArray());
}
}
}
public static void AddContent(ref Document doc, ref PdfWriter writer)
{
var header = new Paragraph("My Document") { Alignment = Element.ALIGN_CENTER };
var paragraph = new Paragraph("Testing the iText pdf.");
var phrase = new Phrase("This is a phrase but testing some formatting also. \nNew line here.");
var chunk = new Chunk("This is a chunk.");
doc.Add(header);
doc.Add(paragraph);
doc.Add(phrase);
doc.Add(chunk);
}
}
在調用編譯器的方法拋出異常:只讀局部變量不能作爲分配對象的doc和MEM。
編輯:這裏只有我在pdf
文件中添加內容的另一種方法。所以我需要傳遞相同的doc對象,對吧?所以爲什麼我不能使用ref
或輸出param
。
技術上using
藐視ref
參數在這裏的目的。
試圖尋找在MSDN:
A ReadOnly property has been found in a context that assigns a value to it.
Only writable variables, properties, and array elements can have values assigned
to them during execution.
怎麼成爲讀取的對象僅在調用方法的?在範圍內對象是活着的,你可以做任何你想做的事情。
請顯示一個簡短但完整的程序來展示問題。 –
不,這不是一個簡短但完整的程序。通過「簡短但完整的程序」,我的意思是「我可以複製並粘貼到新文本文件中的東西,編譯和運行時不做任何更改」。 –
嘗試複製並粘貼到一個新的文本文件並編譯它。什麼是「文檔」類?什麼是「PdfWriter」類? 'Paragraph'? 'Chunk'? 'Phrase'?我強烈懷疑它們與這個問題無關,而且你只需要一些*'IDisposable'實現 - 所以在BCL中使用一個,並添加一個合適的'using'指令。 –