C# 处理此特定 "use of unassigned variable" 问题的最佳 Practices/Standards 方法是什么?
C# What is the Best Practices/Standards way of dealing with this specific "use of unassigned variable" issue?
首先让我说我完全理解导致“使用未分配”的原因。这不是这里的问题。
在下面的代码中,attribs
被声明,但没有赋值。编译器认为当它到达 AddCalcField()
时,变量可能会被取消分配。
string tables = "AllObjects,Computer,Group,Person";
for (int i = 0; i < tables.Split(',').Length; i++) {
ADAttributes attribs;
switch (tables.Split(',')[i]) {
case "Computer": attribs = computerAttributes; break;
case "Group": attribs = groupAttributes; break;
case "Person": attribs = personAttributes; break;
case "AllObjects": attribs = allObjectAttributes; break;
default: Environment.Exit(-5); break;
}
// Later on in the code....
AddCalcField(attribs, "accountexpires", (string)rs["accountexpires"]);
// ERROR: Use of unassigned variable "attribs"
}
但它之所以这样是因为它无法查看 switch
并确定 attribs
绝对肯定地 将被分配,因为如果不是,程序将当场死掉。
只需在四个属性组中任意选择一个作为默认值即可解决此问题。因此,简单地这样做就解决了整个问题并让程序构建没有错误:
ADAttributes attribs = computerAttributes;
但这似乎是“错误的”。我正在浪费资源分配一个不必要的初始值,该值将立即被同样的东西覆盖。
是否有处理这种情况的最佳实践或一些标准设计模式?
编辑: 或者有没有办法告诉编译器忽略这个潜在的错误并继续构建?
就放
default: attribs = default; Environment.Exit(-5); break;
或类似的,这样编译器会很高兴它肯定被分配了,如果你在 [=11] 中向 CSV 添加另一个元素,你只会消耗几纳秒的 CPU 时间=] 并忘记将它添加到 switch
(但是您的程序不久之后就退出了,所以很明显有些地方出了问题!:) )
你有更大的 resource-saving 鱼要用不间断的 Split()
ing
煎炸
首先让我说我完全理解导致“使用未分配”的原因。这不是这里的问题。
在下面的代码中,attribs
被声明,但没有赋值。编译器认为当它到达 AddCalcField()
时,变量可能会被取消分配。
string tables = "AllObjects,Computer,Group,Person";
for (int i = 0; i < tables.Split(',').Length; i++) {
ADAttributes attribs;
switch (tables.Split(',')[i]) {
case "Computer": attribs = computerAttributes; break;
case "Group": attribs = groupAttributes; break;
case "Person": attribs = personAttributes; break;
case "AllObjects": attribs = allObjectAttributes; break;
default: Environment.Exit(-5); break;
}
// Later on in the code....
AddCalcField(attribs, "accountexpires", (string)rs["accountexpires"]);
// ERROR: Use of unassigned variable "attribs"
}
但它之所以这样是因为它无法查看 switch
并确定 attribs
绝对肯定地 将被分配,因为如果不是,程序将当场死掉。
只需在四个属性组中任意选择一个作为默认值即可解决此问题。因此,简单地这样做就解决了整个问题并让程序构建没有错误:
ADAttributes attribs = computerAttributes;
但这似乎是“错误的”。我正在浪费资源分配一个不必要的初始值,该值将立即被同样的东西覆盖。
是否有处理这种情况的最佳实践或一些标准设计模式?
编辑: 或者有没有办法告诉编译器忽略这个潜在的错误并继续构建?
就放
default: attribs = default; Environment.Exit(-5); break;
或类似的,这样编译器会很高兴它肯定被分配了,如果你在 [=11] 中向 CSV 添加另一个元素,你只会消耗几纳秒的 CPU 时间=] 并忘记将它添加到 switch
(但是您的程序不久之后就退出了,所以很明显有些地方出了问题!:) )
你有更大的 resource-saving 鱼要用不间断的 Split()
ing