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

煎炸