繁体   English   中英

错误:使用未分配的局部变量(用于字符串数组)

[英]ERROR: use of unassigned local variable (for string array)

我正在从我的 App.config 文件中读取连接字符串,为此我有以下代码。

try
 {
    string[] dbnames;
    int counter = 0;
    foreach (ConnectionStringSettings connSettings in ConfigurationManager.ConnectionStrings) 
    {
        dbnames[counter] = connSettings.Name;
        counter++;
    }
    return dbnames;
 }
 catch
 {
    throw;
 }

这段代码给我错误使用未分配的局部变量为 dbnames。 我的 App.config 中有多个连接字符串。 它们可以是 none、1、2 等等。 视需要而定。 所以我不能静态分配 dbname 大小。 因为如果它们超过指定大小的值,就会出现这种情况。 例如。 如果我将它的大小分配为 5,如果我得到第 6 个连接字符串会怎样。 如果我有 1 个,那么剩下的 4 个将是内存浪费。

如果我错了,请告诉我。

谢谢。

在初始化数组时使用它。

 string[] dbnames = new string[ConfigurationManager.ConnectionStrings.Count];

或使用List<string>

您不能像那样动态地调整System.Array大小。

幸运的是,没有理由这样做。 使用不同类型的集合,例如List<T> (确保您已经为System.Collections.Generic命名空间添加了using声明!)

与数组一样, List<T>允许您通过索引访问列表中的元素,但它也可以在运行时动态调整大小,从而满足您的问题的要求。 当然,由于它是一种通用方法,因此它具有强类型的额外优势(与您的其他一些选择相比)。 由于您正在使用string类型,因此您将使用List<string>

编辑:绝对不需要那个空的try / catch块。 如果您只想立即重新制作异常,为什么要捕获异常? 就让它冒泡吧。 通常,除非且仅当您可以修复异常的直接原因时,否则不应捕获异常。

您将dbnames声明为字符串数组,但没有定义它的大小。

你需要这样的东西:

string[] dbames = new string[4];

其中“4”是数组的长度。

但是,如果您需要可变长度,则应使用List<string> 在这种情况下,您可以根据需要添加到其中。

正如其他人所说,您可以只使用List<string> 不过,如果您使用 .NET 3.5 或更高版本,我会使用 LINQ 来完成所有这些工作:

return ConfigurationManager.ConnectionStrings
                           .Cast<ConnectionStringSettings>()
                           .Select(setting => setting.Name)
                           .ToArray(); // Or ToList
  • 不需要 foreach 循环(在您的代码中 - 显然它在某个地方:)
  • 您可以轻松决定是返回列表、数组还是简单的IEnumerable<string>
  • 无需尝试/捕获

在课后声明它,例如

我也在写代码,我以前总是遇到这个问题

   public class ABC{
string[] array;
ABC()
{
}
//your_function_logics
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM