以下代码未在我的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);
我想知道如何解决它。
答案 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