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

时间:2011-01-27 10:43:34

标签: c# .net arrays c#-4.0 unassigned-variable

我正在从我的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中有多个连接字符串。它们可以是无,1,2等等。根据需要。所以我不能静态分配dbname大小。因为如果超过指定大小的值,可能会出现这种情况。例如。如果我指定它的大小为5,如果我得到第6个连接字符串怎么办?如果我有1,那剩下的4将是记忆的浪费。

如果我错了,请告诉我。

感谢。

5 个答案:

答案 0 :(得分:10)

初始化阵列时使用它。

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

或使用List<string>

答案 1 :(得分:5)

您无法像这样动态调整System.Array的大小。

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

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

编辑:绝对不需要空try / catch块。如果您只是立即重新开始,为什么会遇到异常?让它冒出来吧。一般情况下,除非您能解决其直接原因,否则您不应该捕获例外情况。

答案 2 :(得分:2)

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

你需要这样的东西:

string[] dbames = new string[4];

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

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

答案 3 :(得分:1)

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

return ConfigurationManager.ConnectionStrings
                           .Cast<ConnectionStringSettings>()
                           .Select(setting => setting.Name)
                           .ToArray(); // Or ToList
  • 不需要foreach循环(在你的代码中 - 显然它有一些东西:)
  • 您可以轻松决定是返回列表,数组还是仅返回IEnumerable<string>
  • 无需尝试/抓住

答案 4 :(得分:1)

下课后声明 例如

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

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