【问题标题】:C# Split() in ListBox列表框中的 C# Split()
【发布时间】:2011-03-03 05:06:43
【问题描述】:

listBox2 内容:

0:第一个产品
1:ProductAgain
2:另一个产品
3:OkFinalProduct

当 listBox2 上的选定索引发生更改时,我要做的是让它使我的 int "DBID" 成为 ":" 之前数字的值。

这是我的尝试:

    private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
    if (listBox2.SelectedIndex == -1)
    {
        return;
    }
    int DBID;
    DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(":"[0]));
    ShowProduct(DBID);
}

非常感谢您对此的任何帮助:)

谢谢大家

编辑 - 抱歉,是的,我实际上尝试过:

DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(':')[0]); 

但我收到以下错误:

  • string.Split(params char[])' 的最佳重载方法匹配有一些无效参数
  • Argument1:无法从 'string' 转换为 'char[]



编辑 #2 -
使用时:

DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(':')[0]);

运行应用程序并单击不同的列表框项后,我遇到了以下异常:

NullReferenceException 未处理。你调用的对象是空的。

感谢大家迄今为止的所有帮助!

【问题讨论】:

  • ":"[0] 是指':'
  • 他的意思可能是.Split(":")[0]
  • 对不起,是的,我实际上尝试过: DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(':')[0]);但我收到以下错误: string.Split(params char[])' 的最佳重载方法匹配有一些无效参数。参数 1:无法从 'string' 转换为 'char[]'
  • 只有在使用引号而不是撇号时才会看到该错误。我刚刚进行了测试,使用我的答案中的代码可以完美运行。
  • 有趣,我重新输入了它,没有错误!但是,当我实际运行应用程序并单击不同的值时,我遇到了这个异常: NullReferenceException - 对象引用未设置为对象的实例 :( 非常感谢到目前为止的帮助!

标签: c# listbox split


【解决方案1】:

尝试改变:

DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(":"[0]));

收件人:

DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(':')[0]);

更新

试试这个。它显式添加了一个新字符:

DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(new char[] { ':' })[0]);

【讨论】:

    【解决方案2】:
    DBID = Convert.ToInt32(listBox3.SelectedValue.ToString().Split(':')[0]);
    

    【讨论】:

    • SelectedValue 本身就是一个字符串
    • 你确定SelectedValue 是一个字符串吗?不是object吗?
    • @Devendra 它在 webapps 中返回一个字符串,在 winforms 中返回一个对象,我的回答是正确的。而且 OP 没有提到他使用的是哪个。
    • @Srinivas Reddy Thatiparthy,感谢您提供的信息。不知道。 :)
    【解决方案3】:

    更安全的方法是将单个语句替换为以下代码,

    if (listBox3.SelectedValue != null)
    {
        string selectedValue = listBox3.SelectedValue.ToString();
    
        if (!string.IsNullOrEmpty(selectedValue))
        {
            if (Int32.TryParse(selectedValue.Split(':')[0], NumberStyles.Integer, CultureInfo.CurrentCulture, out DBID))
            {
                // Process DBID
            }
            else
            {
                // Cannot convert to Int32
            }
        }
    }
    

    然后在代码中使用breakpoints,查找NullReferenceException 出现的位置。

    请注意,此示例假定您使用的是System.Windows.Controls.ListBoxSystem.Windows.Forms.ListBox,而不是System.Web.UI.WebControls.ListBox。在后一种情况下,SelectedValuestring 而不是object(正如@Srinivas Reddy Thatiparthy 在另一个答案的评论中指出的那样)

    【讨论】:

    • 这对我帮助很大。谢谢你
    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    相关资源
    最近更新 更多