C# 用数组替换列表
我有以下方法,如下所示:C# 用数组替换列表,c#,arrays,list,sqlcommand,C#,Arrays,List,Sqlcommand,我有以下方法,如下所示: public static string loadLista(string pStrOp) { System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["WXYZ"].ConnectionString); System.Data
public static string loadLista(string pStrOp)
{
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["WXYZ"].ConnectionString);
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("select distinct RTRIM(LTRIM(c.str_val)) as Id , RTRIM(LTRIM(c.str_val)) as Value " +
"from dbo.toc a " +
"inner join dbo.propval c on c.tocid = a.tocid and c.PROP_ID = 698 " +
"where a.pset_id = 114 and c.str_val is not null " +
"order by 2 asc;", conn);
var items = new List<Parametro>();
try
{
conn.Open();
using (var dr = cmd.ExecuteReader())
{
if (dr.HasRows)
{
int fc = dr.FieldCount;
var colums = new Dictionary<int, string>();
for (int i = 0; i < fc; i++)
colums.Add(i, dr.GetName(i));
object[] values = new object[fc];
while (dr.Read())
{
dr.GetValues(values); //Get All Values
Parametro item = Activator.CreateInstance<Parametro>();
var props = item.GetType().GetProperties();
foreach (var p in props)
{
foreach (var col in colums)
{
if (p.Name != col.Value) continue;
var value = values[col.Key];
if (value.GetType() != typeof(DBNull))
{
p.SetValue(item, value, null);
}
}
}
items.Add(item);
}
}
}
}
catch (Exception ex)
{
return new System.Web.Script.Serialization.JavaScriptSerializer().Serialize("");
}
return new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(items);
}
如您所见,我使用SqlCommand进行查询,然后将其存储在DataReader中以处理数据,最后将其保存在列表中。这个方法工作得很好,问题是我如何在这个方法中替代列表的使用,而是使用数组,因为我有一个限制,阻止我使用列表。
如果你能给我一个应用的例子,那将非常有帮助。提前感谢您提供的帮助。我不太明白您为什么不能使用列表,您应该先弄清楚这一点,但是出于学术目的 将一维数组的元素数更改为 指定的新大小 评论 此方法分配一个具有指定大小的新数组,即副本 元素,然后替换旧数组 具有新数组的数组。数组必须是一维数组 如果数组为null,则此方法将使用指定的 尺寸 因此,与其使用列表 注意,这是相当低效的,当列表必须在内部增加阵列时,它实际使用的容量设置为所需容量的2倍
免责声明:未经测试,可能存在键入错误您可以随时调用列表中的阵列-阵列的问题是您无法轻松更改其大小,但您可以轻松地将项目添加到列表中。若你们解释为什么你们不能使用列表,也许可以找到一个不同的解决方案。我还想说,吞下任何异常,仅仅返回一个空结果是并没有帮助的。您不知道异常是什么,也不知道是什么原因导致它知道要修复什么。@DStanley问题是我不能使用列表,例如在定义var items=new List时;我在代码中有一个错误,此方法应在已实现的解决方案中工作,不识别列表的问题应针对解决方案中的程序集,但添加用于列表工作的程序集可能会对其他功能产生影响,这就是为什么在第一个实例中,提议的是用安排来代替列表的使用。我不明白问题是什么。列表在mscorlib中,所以不应该添加额外的程序集。@DStanley-他们显然不知道自己在说什么。我想你需要读一本关于编程的书。这是一个根本性的缺乏理解的问题,可能真的很烦人-只需拿起一本书或做一些关于列表和数组的.Net教程。YW我无法抗拒递归元素:-
Parametro[] items;
...
Array.Resize(items, (items?.Length ?? 0) +1 ) // resize
items[items.Length-1] = item; // add item to the last index