c#中数组中的字符串操作(替换)

时间:2015-01-30 13:08:07

标签: c# string

我在使用数组进行字符串操作时遇到了一些麻烦。

我有这个:

public string LB_Ward_Selected()
{
    string SelectedWard = String.Join(",", LB_Ward.Items.Cast<ListItem>()
                                               .Where(i => i.Selected));
    string[] SelectedItems = SelectedWard.Split(',');
    for (int i = 0; i < SelectedItems.Length; i++)
    {
        SelectedItems[i].Replace(SelectedItems[i].ToString(), "'" + SelectedItems[i].ToString() + "'").ToArray();
    }
    SelectedWard = string.Join(",", SelectedItems);
    return SelectedWard;
}

我从asp listbox中选择多个选项并将其整理为CSV字符串,然后拆分为数组,然后尝试更改(使用Replace。)数组中的分隔字符串,然后将其输出回逗号分隔值字符串。

我无法理解为什么它不起作用,有什么想法?

HTML:

<asp:ListBox ID="LB_Ward" runat="server" DataSourceID="SQLWard" CssClass="btn btn-default" SelectionMode="Multiple"
    DataTextField="WARD" DataValueField="WARD" AutoPostBack="True" AppendDataBoundItems="true" EnableViewState="false" OnSelectedIndexChanged="DD_area_SelectedIndexChanged">
    <asp:ListItem Value="0">Select Ward</asp:ListItem>
</asp:ListBox>

<asp:SqlDataSource ID="SQLWard" runat="server" ConnectionString="<%$ ConnectionStrings:constr %>"
    SelectCommand="SELECT DISTINCT [WARD]  FROM [Borough] WHERE Borough =@BoroughFilter">

    <SelectParameters>
        <asp:ControlParameter ControlID="DropDownListBorough" PropertyName="SelectedValue"
            Name="BoroughFilter" Type="String" DefaultValue="" />
    </SelectParameters>
</asp:SqlDataSource>

这个方法的调用如下:

if (LB_Ward.SelectedIndex > 0)
{
    ward = LB_Ward_Selected();
}

我知道需要提炼! :)

2 个答案:

答案 0 :(得分:3)

您对Replace方法的输出无效:

SelectedItems[i] = SelectedItems[i].Replace(...)

您需要执行此操作,因为string实例无法操作,存在不可变。 “改变”它们的唯一方法是将它们的实例设置为另一个。

此外,调用SelectedItems[i].ToString()没有意义,因为SelectedItems[i]已经是string

答案 1 :(得分:1)

您的代码的主要问题是您没有将Replace的返回值分配回数组。但是您的整个代码可以简化为以下内容:

return string.Join(
    ",", 
    LB_Ward.Items
        .Cast<ListItem>()
        .Where(i => i.Selected)
        .Select(i => "'" + i.ToString() + "'")
        .ToArray());

这将获取所有选定的项目,在它们周围放置单引号,然后使用逗号分隔符将它们连接在一起。这样可以避免加入,拆分,然后重新加入您的代码当前所做的以及不必要地使用Replace

注意:您甚至可以删除ToString中的Select,我只是将其放在那里,以明确ListItem如何变成字符串。

这里唯一可能的警告是,如果你的任何物品都有逗号。如果是这种情况,那么您的原始代码实际上是拆分单个项目,上面的代码不会产生相同的输出。为此,您可以执行以下操作。

return string.Join(
    ",", 
    LB_Ward.Items
        .Cast<ListItem>()
        .Where(i => i.Selected)
        .SelectMany(i => i.ToString().Split(',').Select(s => "'" + s + "'"))
        .ToArray());

这里的不同之处在于,我们尝试在逗号上拆分每个项目,获取结果并在它们周围加上单引号,然后使用SelectMany将多个结果枚举展平为一个。

注意:在这种情况下,ToString必须能够执行Split