我正在使用C#和VS2013以及.Net 4.5.2。
我创建一个变量,如果某个其他变量是布尔值设置为true,则为其赋值。稍后使用相同的变量,看看我是否应该处理涉及该变量的任何内容。
FileInfo newFile;
ExcelPackage assetTemplate;
ExcelWorksheet assetWorkbook;
if (load.assetDelivery) // Bool in another class
{
newFile = new FileInfo(load.assetDeliveryTemplate);
assetTemplate = new ExcelPackage(newFile);
assetWorkbook = assetTemplate.Workbook.Worksheets[1];
}
// In this function later on, assetWorkbook and assetTemplate are causing errors
// Error 1 Use of unassigned local variable 'assetWorkbook'
if (load.assetDelivery)
{
assetWorkbook.Cells.AutoFitColumns();
destination = load.exportFileDestination + load.assetDeliveryName + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
assetTemplate.SaveAs(new FileInfo(destination));
}
答案 0 :(得分:2)
将null
分配给您的变量:
ExcelPackage assetTemplate = null;
ExcelWorksheet assetWorkbook = null;
答案 1 :(得分:2)
编译器抱怨,因为它无法知道控制流将进入检查(真实部分),并且您的字段/变量将明确分配。因此错误。
您可以通过分配这些字段默认值
来解决此问题ExcelPackage assetTemplate = default(ExcelPackage);
ExcelWorksheet assetWorkbook = default(ExcelWorksheet);
或指定else部分:
if (load.assetDelivery) // Bool in another class
{
newFile = new FileInfo(load.assetDeliveryTemplate);
assetTemplate = new ExcelPackage(newFile);
assetWorkbook = assetTemplate.Workbook.Worksheets[1];
}
else
{
ExcelPackage assetTemplate = default(ExcelPackage);
ExcelWorksheet assetWorkbook = default(ExcelWorksheet);
}
答案 2 :(得分:0)
只需使用default
值初始化它。
ExcelWorksheet assetWorkbook = default(ExcelWorksheet);
答案 3 :(得分:0)
在C#中,您必须保证在使用本地变量之前初始化它。在这种情况下,如果您的第一个assetWorkbook
失败,if
将永远不会被分配值,这意味着编译器无法保证在使用之前对其进行了初始化。
如果你给他们一个初始值,即使是null
,那么你的代码就会编译 - 只要记住,如果值为null
,那么你需要{{1}如果它永远不会得到真正的值,那么请确保先进行空检查,或者100%确定你给它一个值。
答案 4 :(得分:0)
您可以使用默认值(c.f。其他答案),但这看起来像一些缺少功能组合的示例。如果你的功能看起来像
public void CreateSheet(string exportDestination, string assetName)
{
FileInfo newFile = new FileInfo(load.assetDeliveryTemplate);
ExcelPackage assetTemplate = new ExcelPackage(newFile);
ExcelWorksheet assetWorkbook = assetTemplate.Workbook.Worksheets[1];
assetWorkbook.Cells.AutoFitColumns();
destination = exportDestination + assetName + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
assetTemplate.SaveAs(new FileInfo(destination));
}
总是安全的。