【问题标题】:Is it possible to add List<string> values dynamically in one line of code?是否可以在一行代码中动态添加 List<string> 值?
【发布时间】:2013-10-25 15:54:50
【问题描述】:

我有一个项目,我从 formview 字段中获取值作为字符串(40 多个字段)。我想减少代码中的行数,并希望将列表值添加到我从表单视图中收集的每个字符串值的一行代码中。

我的代码片段是:

...
List<string> mylist = new List<string>();

string str1 = e.NewValues["value1"].ToString();
myList.Add(str1);
string str2 = e.NewValues["value2"].ToString();
myList.Add(str2);
string str3 = e.NewValues["value3"].ToString();
myList.Add(str3);
string str4 = e.NewValues["value4"].ToString();
myList.Add(str4);
...

是否可以在一行代码中添加这些字符串,例如:

myList.Add(string str1 = e.NewValues["value1"].ToString());

或

myList.Add((string) something... not getting the correct format.

我用sql参数做了类似的事情 即——

 cmd.Parameters.Add(new OleDbParameter("ENTRY", OleDbType.VarChar) 
 { 
   Value = ENTRY,
   Direction = ParameterDirection.Input 
 }); 

-- 但我已经搜索了许多尝试这样做的方法,但没有任何结果。我不确定是我搜索不正确还是不可能?

【问题讨论】:

  • myList.Add(e.NewValues["value1"].ToString());
  • 呃!我想得太难了,把事情复杂化了。您的所有回复都有效。感谢您的快速回复。
  • 什么是 NewValues ?列表?
  • myList =e.NewValues.Select(x=&gt;x.ToString()).ToList();
  • NewValues 是我的 FormView 中的一个事件 arg。我只需要构建一个值列表以传递给更新存储过程。

标签: c# asp.net string list


【解决方案1】:
List<string> mylist = new List<string>
{
   e.NewValues["value1"].ToString(),
   e.NewValues["value2"].ToString()
   //etc...
};

使用Object Initializer 可以让您在初始化对象时构建它。

例如,如果你有一个班级:

class Test
{
   string test1 { get; set; }
   int test2 { get; set; }
}

你可以像这样初始化它:

Test tester = new Test{ test1 = "some string", test2 = 5 };

【讨论】:

    【解决方案2】:

    使用 Linq 怎么样?

    类似:

    List<string> mylist = new List<string>();
    
    myList.AddRange(e.NewValues.ToList().Select(s => s.ToString());
    

    或

    e.NewValues.ToList().ForEach(v => 
                            {
                              //can add additional manipulation or If clause here
                              //if you have some exclusions
                              myList.Add(v.ToString())
                             });
    

    【讨论】:

      【解决方案3】:

      试试这个:

      myList.Add(e.NewValues["value1"].ToString());
      

      【讨论】:

        【解决方案4】:

        你可以使用

        myList.AddRange(
           new[]{  
                e.NewValues["value1"].ToString(),   
                e.NewValues["value2"].ToString()  
        });
        

        或使用内联赋值:

        List<string> mylist = new List<string>
        {
           e.NewValues["value1"].ToString(),
           e.NewValues["value2"].ToString()
        };
        

        【讨论】:

          【解决方案5】:

          NewValues 是一本字典,所以这样可以在一个衬里中工作:

           List<string> mylist = e.NewValues.Values.ToList().ConvertAll(x => x.ToString());
          

          更新:

          NewValues 返回的是一个orderedDictionary,所以在你的eventHandler中放置这个代码:

          List<string> mylist = new List<string>();
          
          foreach (DictionaryEntry item in e.NewValues)
          {
              mylist.Add(item.Value.ToString());
          }
          

          或者如果 mylist 是一个类成员变量,那么只有 foreach 循环会填充列表。

          【讨论】:

          • ToList 不是值之后的选项,但如果 ...Values.ToString().ToList()... 被添加但它不会返回我正在寻找的字段值. FormView 还具有标签和下拉列表,我从中获取值并更新数据库中的记录。如果我可以在一行中从表单视图中获取我的所有控件值,那就太棒了!我正在使用 '(Object sender, FormViewUpdateEventArgs e)' - 如果有更好的方法,我愿意。
          • @acjohnson72 刚刚根据您的评论进行了编辑,希望对您有所帮助。
          【解决方案6】:
          <form id="form1" runat="server">
          <div>
          <table>
          <tr>    <td>    <asp:TextBox ID="txxt" runat="server" />    </td>    </tr>
          <tr>    <td>    <asp:Button ID="btn" Text="test" runat="server" style="width: 36px" />    </td>    </tr>
          <tr>    <td>  <asp:HiddenField ID="hdntest" runat="server" />    </td>    </tr>
          </table>
          </div>
          </form>
          

          .

          Protected Sub btn_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn.Click
          
              Dim s As String = ""
              s = txxt.Text
              s = s + ","
              hdntest.Value = hdntest.Value + s
              txxt.Text = hdntest.Value
          
          End Sub
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-06-07
            • 1970-01-01
            • 1970-01-01
            • 2011-06-11
            • 2012-06-09
            • 2011-04-13
            相关资源
            最近更新 更多