c# – IDisposable对象作为ref参考方法

c# – IDisposable对象作为ref参考方法,第1张

概述我正在做一个类的重构,并考虑用一个单独的方法移动100行.喜欢这个: using iTextSharp.text;using iTextSharp.text.pdf; class Program{ private static void Main(string[] args) { Document doc = new Document(iTextSharp. 我正在做一个类的重构,并考虑用一个单独的方法移动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,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或out参数.

在技​​术上使用ref在这里ref 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 assignedto them during execution.

在调用方法时,对象如何变为只读?在范围内的对象是活着的,你可以做任何你想要的.

解决方法 这是因为您使用using关键字声明doc和mem.引用 MSDN:

Within the using block,the object is read-only and cannot be modifIEd or reassigned.

因此,您会收到有关只读变量的错误.

如果您仍然希望通过引用传递参数,可以使用try … finally块而不是使用.正如Jon Skeet所指出的那样,这段代码与使用是如何扩展但是使用语句相似的,它总是被处理的原始对象.在下面的代码中,如果AddContent更改了doc的值,那么它将是在dispose调用中使用的后一个值.

var doc = new document(PageSize.A4,5f,5f);try{     var mem = new MemoryStream();     try     {         pdfWriter wri = pdfWriter.GetInstance(doc,output);         doc.open();         AddContent(ref doc,ref wri );         doc.Close();     }     finally     {         if (mem != null)             ((Idisposable)mem).dispose();     } } finally {     if (doc != null)         ((Idisposable)doc).dispose(); } return output.ToArray();
总结

以上是内存溢出为你收集整理的c# – IDisposable对象作为ref参考方法全部内容,希望文章能够帮你解决c# – IDisposable对象作为ref参考方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1260293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存