【问题标题】:SqlCommand and error: The left-hand side of an assignment must be a variable, property or indexerSqlCommand 和错误:赋值的左侧必须是变量、属性或索引器
【发布时间】:2013-04-13 07:44:34
【问题描述】:

我有一个小问题。在我的程序中,我需要一个 SqlCommand 对象列表。于是就有了一段代码:

List<SqlCommand> commands;
int i = 0;
foreach (string komenda in komendy)
{
    commands.ElementAt<SqlCommand>(i) = new SqlCommand(komenda, dostep());
    i++;
}

其中 komendy 是带有命令字符串的字符串列表,函数 dostep() 正在返回连接(SqlConnection 对象)。

我有一个错误:赋值的左侧必须是命令的变量、属性或索引器。ElementAt(i) 我真的不明白为什么。

【问题讨论】:

    标签: c# wpf list sqlcommand


    【解决方案1】:

    ElementAt 是一种返回序列中指定索引处的对象的方法,您正在使用它,因为它是将元素添加到列表的分配。

    当使用List(of Type) 时,您可以使用Add method 向列表中添加元素,而无需指定精确位置。 (这是数组的主要工作) 只需使用.....

     commands.Add(new SqlCommand(komenda, dostep()));
    

    当然,在使用一个对象之前,你需要用它来初始化它

    List<SqlCommand> commands = new List<SqlCommand>();
    

    作为旁注,我对您在初始化 SqlConnection 对象的情况下构建 SqlCommand 列表的方法感到有些困惑。如果您有许多命令,这可能会占用大量资源。

    【讨论】:

    • +1 不仅提供了解决方案,而且回答了为什么抛出异常的问题。
    【解决方案2】:

    为什么不使用 LINQ:

    List<SqlCommand> commands = komendy.Select(x => new SqlCommand(x, dostep())).ToList();
    

    使用您的方法,您缺少 commands 初始化

    List<SqlCommand> commands = new List<SqlCommand>();
    

    您应该使用Add 方法而不是ElementAt

    foreach (string komenda in komendy)
    {
        commands.Add(new SqlCommand(komenda, dostep()));
    }
    

    【讨论】:

    • 哦,我不知道为什么我忘记了添加功能。非常感谢您的帮助。
    猜你喜欢
    • 2018-08-10
    • 1970-01-01
    • 2015-07-07
    • 2017-05-28
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    相关资源
    最近更新 更多