使用仅在if语句中赋值的变量
本文关键字:赋值 变量 语句 if | 更新日期: 2023-09-27 18:18:47
我使用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));
}
将null
赋给变量:
ExcelPackage assetTemplate = null;
ExcelWorksheet assetWorkbook = null;
编译器正在抱怨,因为没有办法让它知道控制流将进入检查(true部分)和您的字段/变量将明确分配。因此产生了错误。
你可以通过指定这些字段的默认值来解决这个问题,
ExcelPackage assetTemplate = default(ExcelPackage);
ExcelWorksheet assetWorkbook = default(ExcelWorksheet);
或指定其他部分:
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);
}
参见:5.3明确赋值- MSDN
用default
值初始化。
ExcelWorksheet assetWorkbook = default(ExcelWorksheet);
在c#中,必须保证在使用局部变量之前初始化它。在这种情况下,如果第一个if
失败,assetWorkbook
将永远不会被赋值,这意味着编译器不能保证它在使用之前被初始化。
如果你给他们一个初始值,甚至null
,那么你的代码将编译-只要记住,如果值是null
,那么你受制于NullReferenceException
,如果它从来没有得到一个真正的值,所以确保你要么先做一个空检查,或者100%确定你给了它一个值。
您可以使用默认值(参见其他答案),但这看起来像是缺少功能组合的示例。如果你有一个类似于
的函数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));
}
永远都是安全的