如何在范围外使用变量? (错误:CS0136)

时间:2017-01-28 17:52:21

标签: c#

我写了一个程序,它读取PDF文件,然后显示一些有关它的信息。它工作正常。

class Program
    {
        static void Main(string[] args)
        {
            //some variables
            string plabels = null;
            string text2Search = "IX";
            PdfReader reader = new PdfReader("file.pdf");
            string[] labels = PdfPageLabels.GetPageLabels(reader);

            for (int l = 0; l < labels.Length; l++)
            {
                plabels += labels[l] + "\n";
            }
            Console.WriteLine(plabels.IndexOf(text2Search, StringComparison.CurrentCultureIgnoreCase));
            Console.ReadLine();
        }
    }

我还写了另一个程序来读取PDF文件并复制它。它也可以正常工作。

class Program
    {
        static void Main(string[] args)
        {

            byte[] bytes;

            using (var ms = new MemoryStream())
            {
                using (var reader = new PdfReader("file.pdf"))
                {
                    using (var stamper = new PdfStamper(reader, ms))
                    {

                    }
                }
                //grab the bytes before closing things out
                bytes = ms.ToArray();
            }
            File.WriteAllBytes("output.pdf", bytes);
        }
    }

我不能做的是将这两个程序合二为一。

修改

感谢您的评论,我发现了一个错误。现在我的代码编译得很好,但是在运行时它会给出"Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object."错误指向行for(int l = 0; l < labels.Length; l++)

class Program
{
    static void Main(string[] args)
    {

        byte[] bytes;

        using (var ms = new MemoryStream())
        {
            using (var reader = new PdfReader("file.pdf"))
            {
                //some variables
                string plabels = null;
                string text2Search = "IX";
                string[] labels = PdfPageLabels.GetPageLabels(reader);
                for(int l = 0; l < labels.Length; l++)
                    {
                    plabels += labels[l] + "\n";
                }
                Console.WriteLine(plabels.IndexOf(text2Search, StringComparison.CurrentCultureIgnoreCase));
                Console.ReadLine();
                using (var stamper = new PdfStamper(reader, ms))
                {

                }
            }
            //grab the bytes before closing things out
            bytes = ms.ToArray();
        }
        File.WriteAllBytes("output.pdf", bytes);
    }
}

2 个答案:

答案 0 :(得分:0)

reader已在using语句中定义。您无法在using块中重复使用该变量名称。更改其中一个reader变量的名称或删除它。

using (PdfReader reader = new PdfReader("file.pdf"))
{
    PdfReader reader = new PdfReader("file.pdf"); //is redundant.
}

答案 1 :(得分:0)

标签为空。您的PdfPageLabels.GetPageLabels(reader); 未返回值,请查看其中。没有贴出任何代码,所以我无法给你一个更清楚的答案。