我的代码中有很多数组,例如;
string[] arrayA = new string[31];
我需要将数组中的值放入SQL数据库
SqlCommand commA = new SqlCommand("INSERT INTO dbo.DatabaseA" +
" (ColumnA) VALUES" +
" (@ColumnA)", connA);
commA.Parameters.Add("@ColumnA", SqlDbType.NVarChar).Value = arrayA[3];
为什么@ColumnA
返回错误“未提供值”或确切地说是arrayA[3] = null
?我一直认为未分配的string []具有""
初始值。
如果一开始我分配arrayA[3] = ""
前的SQLCommand
代码的工作就好了。
有没有一种方法来填充所有string[] arrayA
与""
不使用循环?
根据提供的代码,没有将分配给arrayA[3]
数组的值只是将其存储为值的容器,并将每个值设置为类似于going的类型的默认值default(string)
。
现在,作为string
一个参考类型的字符串的默认值是null
然而一个值类型 int
例如将具有默认值0
。
我们可以轻松地对此进行测试。
string[] arrayA = new string[31];
var s = arrayA[3]; //is null as string is a reference type
int[] arrayB = new int[31];
var i = arrayB[3]; //equals 0 as default(int) = 0
现在,正如注释中指出的那样,有一些简单的方法可以填充数组,并且引用的注释指向如何使用单个值填充/实例化C#数组?
下面的摘录来自上面的答案
public static void Populate<T>(this T[] arr, T value ) {
for ( int i = 0; i < arr.Length;i++ ) {
arr[i] = value;
}
}
可以这样称呼:
arrayA.Populate("");
因此,在通话中:
commA.Parameters.Add("@ColumnA", SqlDbType.NVarChar).Value = arrayA[3];
实际上 arrayA[3] = null
编辑上面的代码段是一个扩展方法(如this
方法签名中第一个参数上的关键字所示)。这必须static class
类似于以下内容。
public static class ArrayExtensions
{
public static void Populate<T>(this T[] arr, T value)
{
for (int i = 0; i < arr.Length; i++)
{
arr[i] = value;
}
}
}
至于问题
有没有一种方法可以使用“”填充所有string [] arrayA而无需使用for循环?
设置数组中所有项目默认值的所有方法都将需要某种形式的循环,并且该循环可能在某处foreach
或for
后面。
您还可以创建一个方法,该方法将为您创建一个具有默认值的指定大小的数组。
public static T[] CreateArray<T>(int capacity, T defaultValue)
{
var array = new T[capacity];
array.Populate(defaultValue);
return array;
}
然后可以将其称为:
var arrayC = ArrayExtensions.CreateArray<string>(31, "");
s = arrayC[3]; //equals ""
但是,这对我来说似乎太懒了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句