c# string[] arrayA返回arrayA[3]中的空值
本文关键字:arrayA 空值 返回 string | 更新日期: 2023-09-27 18:01:54
我的代码中有很多数组,例如;
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
?我一直认为unassigned string[]有""
作为初始值
如果在SQLCommand
之前分配arrayA[3] = ""
,代码工作得很好。
是否有一种方法来填充所有string[] arrayA
与""
不使用for循环?
从提供的代码来看,没有给arrayA[3]
赋值,数组只是一个值的容器,并将每个值设置为与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;
}
}
}
对于这个问题
是否有一种方法来填充所有字符串[]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 ""
然而,这对我来说开始看起来太懒了。
没有为数组分配任何值。如果需要" ",如果没有值,则使用条件运算符。
arrayA[3]==null?"":arrayA[3];
条件运算符