c# - 为什么局部变量在一种方法中赋值,但在几乎相同的方法中未赋值?

标签 c# exception variable-assignment unassigned-variable

当我编译这段代码时,我收到一个编译错误,指出 writerSaveArray 中未分配的局部变量。它不会在类似方法 LoadArray 中提示 reader。为什么会这样?他们的行为不应该一样吗?

    static void SaveArray(string fileName,  string[,] arr)
    {
        StreamWriter writer;
        try
        {
            writer = new StreamWriter(fileName);
        }
        catch
        {
            MessageBox.Show("Error, could not open " + fileName + " for saving");
        }
        try 
        {
            foreach (string entry in playerArray)
            {
                writer.WriteLine(entry);
            }
        }
        catch
        {
            MessageBox.Show("Couldn't save");
        }
        writer.Close();
    }

    static void LoadArray(string fileName, string[,] arr)
    {
        StreamReader reader;

        try
        {
            reader = new StreamReader( fileName );
        }
        catch
        {
            MessageBox.Show("Error when reading file" +fileName);
            return;
        }


        try
        {
            for(int i=0; i<=arr.GetUpperBound(0); ++i)
            {
                for (int j = 0; j<=arr.GetUpperBound(1); ++j)
                {
                    arr[i, j] = reader.ReadLine();
                }
            }

        }
        catch
        {
            MessageBox.Show("Could not read from file " +fileName);
        }
        reader.Close();
    }

最佳答案

如果 new StreamWriter(fileName); 抛出异常,则 s 保持未分配状态。

尝试在 s.WriteLine(entry); 中使用它是错误的。

正如 @DarrenYoung 评论的那样,LoadArraycatch 返回,所以 xx 中。 ReadLine() 保证被初始化。

关于c# - 为什么局部变量在一种方法中赋值,但在几乎相同的方法中未赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27027644/

相关文章:

C++:无法重新分配类,在线使用默认构造函数

c# - ASP.NET MVC2 - 使用 LINQ 生成的类(验证问题)

c# - 扩展选择要在 Linq 中使用的扩展

.net - 使用 SQL 2005 在 .NET 中检查错误

Python 列表扩展和变量赋值

c++ - 为什么不能在类主体中分配变量?

c# - 记录在 DbContext 上执行的所有 linq 查询 - C#

c# - 自定义Identity和GenericPrincipal引起的序列化异常

java - 我应该使用 Exception 来模拟 java 中的 goto 语句吗?

jquery - ng-repeat 排序在 jQuery 中抛出异常