我正在从我的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将是记忆的浪费。
如果我错了,请告诉我。
感谢。
答案 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
IEnumerable<string>
答案 4 :(得分:1)
下课后声明 例如
我也在写代码,我以前总是遇到这个问题
public class ABC{
string[] array;
ABC()
{
}
//your_function_logics
}