分配时使用取消分配变量事件?

时间:2017-12-17 23:58:28

标签: c# .net

以下代码未在我的VS 2017中编译:

        for (int i = 0; i < data.data.Length; i++)
        {
            ws.Cells[0, i].Value = data.data[i].name;
            Type type;

            try
            {
                type = Type.GetType((string)data.data[i].type);
            }
            catch (Exception e) {}

            for (int j = 0; j < data.data[i].data.Count; j++)
            {
                ws.Cells[j + 1, i].Value = Convert.ChangeType(data.data[i].data[j], type);
            }
        }

以下行返回此错误:Use of unassigned local variable 'type'

ws.Cells[j + 1, i].Value = Convert.ChangeType(data.data[i].data[j], type);

我想知道如何解决它。

4 个答案:

答案 0 :(得分:2)

发生错误是因为type可以在某些特定条件下取消分配。在这种情况下,您只在type语句中指定了try。如果在try语句中抛出异常并且永远不会分配type该怎么办?

您需要在type语句之前分配try,或者在发生异常时暂停。

Type type = null; // assigning null fixes the error but this might not be a good solution.

try
{
    type = Type.GetType((string)data.data[i].type);
}

如果出现异常,您需要仔细考虑要执行的操作。如果有异常type将被取消分配,您的代码可能无法继续。如果这适用于您的情况,建议您在catch声明和return中显示错误消息。

基本上,拥有一个空的catch语句通常是真的坏主意。

答案 1 :(得分:0)

try catch可能会失败,然后type不会被启动。

作为一个最小的例子

Type type;
try
{
    type = typeof(int);

}
catch (Exception e)
{

}
Console.WriteLine($"{type}");

写信线将失败并出现相同的编译错误

要么初始化它 与Type type = null

或者不要让代码从捕获中获取

答案 2 :(得分:0)

您看到的问题是type尚未初始化。将声明更改为Type type = null;

然后,您可以在if (type != null)循环周围使用for,以确保type实际已设置。

答案 3 :(得分:0)

由于try-catch block分配已包含在Type.GetType((string)data.data[i].type)中且type可能会引发异常......如果发生异常,您的Convert.ChangeType变量将会unassigned,因此,内部for循环将尝试将未分配的值传递给for (int i = 0; i < data.data.Length; i++) { ws.Cells[0, i].Value = data.data[i].name; Type type; try { type = Type.GetType((string)data.data[i].type); } catch (Exception e) { continue; } for (int j = 0; j < data.data[i].data.Count; j++) { ws.Cells[j + 1, i].Value = Convert.ChangeType(data.data[i].data[j], type); } } 。你必须有可能的解决方案来避免这种情况。

第一个包括在抛出异常时跳过当前外循环:

type

第二个问题包括使用null预先初始化您的null变量...但是,老实说,如果您将Convert.ChangeType传递给for (int i = 0; i < data.data.Length; i++) { ws.Cells[0, i].Value = data.data[i].name; Type type = null; try { type = Type.GetType((string)data.data[i].type); } catch (Exception e) { } for (int j = 0; j < data.data[i].data.Count; j++) { ws.Cells[j + 1, i].Value = Convert.ChangeType(data.data[i].data[j], type); } } ,我就不知道会发生什么non ......可能是坏事或者没什么(只是浪费内心循环):

www