Я делал рефакторинг класса и думал о перемещении 100 строк в отдельном методе. Как это:IDisposable objects как ref param для метода
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);
}
}
При вызове метода компилятор бросает исключение: Readonly локальная переменная не может быть использована в качестве целевого назначения для док и 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'. –