我在使用数组进行字符串操作时遇到了一些麻烦。
我有这个:
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();
}
我知道需要提炼! :)
答案 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
。