4

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

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

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

如果我错了,请告诉我。

谢谢。

4

5 回答 5

13

在初始化数组时使用它。

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

或使用List<string>

于 2011-01-27T10:47:57.790 回答
5

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

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

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

编辑:绝对不需要那个空try/catch块。如果您要立即重新处理异常,为什么要捕获异常?就让它冒泡吧。一般来说,你不应该捕获异常,除非且仅当你能解决它们的直接原因。

于 2011-01-27T10:47:16.637 回答
2

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

你需要类似的东西:

string[] dbames = new string[4];

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

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

于 2011-01-27T10:47:41.170 回答
1

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

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

在课后声明它,例如

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

   public class ABC{
string[] array;
ABC()
{
}
//your_function_logics
}
于 2019-08-28T21:00:35.117 回答