C#字符串操作-如何删除集合中每个连接字符串的第一个元素
我正在基于ListView控件每行中的数据创建连接字符串。我需要弄清楚如何删除每个字符串中与ListView的一行相关的第一个元素。我如何才能做到这一点?这是一个C#winforms项目 这是我当前的代码:C#字符串操作-如何删除集合中每个连接字符串的第一个元素,c#,string,listview,C#,String,Listview,我正在基于ListView控件每行中的数据创建连接字符串。我需要弄清楚如何删除每个字符串中与ListView的一行相关的第一个元素。我如何才能做到这一点?这是一个C#winforms项目 这是我当前的代码: foreach (ListViewItem HazPackErrItems in HazmatPackageErrorListview.Items) { string HazPackErrRow = " ";
foreach (ListViewItem HazPackErrItems in HazmatPackageErrorListview.Items)
{
string HazPackErrRow = " ";
foreach (ListViewItem.ListViewSubItem HazPackErrSub in HazPackErrItems.SubItems)
{
HazPackErrRow += " " + HazPackErrSub.Text + ",";
}
// Remove comma after last element of string.
HazPackErrRow = HazPackErrRow.Substring(0, HazPackErrRow.Length - 2);
MessageBox.Show(HazPackErrRow); // List concatenated subitems
}
一开始就不要加进去
foreach (ListViewItem HazPackErrItems in HazmatPackageErrorListview.Items)
{
string HazPackErrRow = " ";
bool first = true;
foreach (ListViewItem.ListViewSubItem HazPackErrSub in HazPackErrItems.SubItems)
{
if (first)
first = false;
else
HazPackErrRow += " " + HazPackErrSub.Text + ",";
}
// Remove comma after last element of string.
HazPackErrRow = HazPackErrRow.Substring(0, HazPackErrRow.Length - 2);
MessageBox.Show(HazPackErrRow); // List concatenated subitems
}
一开始就不要加进去
foreach (ListViewItem HazPackErrItems in HazmatPackageErrorListview.Items)
{
string HazPackErrRow = " ";
bool first = true;
foreach (ListViewItem.ListViewSubItem HazPackErrSub in HazPackErrItems.SubItems)
{
if (first)
first = false;
else
HazPackErrRow += " " + HazPackErrSub.Text + ",";
}
// Remove comma after last element of string.
HazPackErrRow = HazPackErrRow.Substring(0, HazPackErrRow.Length - 2);
MessageBox.Show(HazPackErrRow); // List concatenated subitems
}
您可以使用:
因为其他人似乎在重写您的代码,为什么我不能?=]
foreach(ListViewItem HazPackErrItems in HazmatPackageErrorListview.Items)
{
string HazPackErrRow = String.Join(", ", HazPackErrItems.SubItems.Skip(1).Select(t => t.Text).ToArray());
MessageBox.Show(HazPackErrRow); // List concatenated subitems
}
您可以使用:
因为其他人似乎在重写您的代码,为什么我不能?=]
foreach(ListViewItem HazPackErrItems in HazmatPackageErrorListview.Items)
{
string HazPackErrRow = String.Join(", ", HazPackErrItems.SubItems.Skip(1).Select(t => t.Text).ToArray());
MessageBox.Show(HazPackErrRow); // List concatenated subitems
}
如果我正确地理解了这个问题,您可以使用for循环,将索引从0开始改为1 如果我正确理解了这个问题,您可以使用for循环,将索引从0改为1 这是基于Inferis的答案,但它使用了StringBuilder并避免了最后的子字符串调用:
foreach (ListViewItem errors in HazmatPackageErrorListview.Items)
{
StringBuilder builder = new StringBuilder();
bool first = true;
foreach (ListViewItem.ListViewSubItem error in errors.SubItems)
{
if (first)
{
first = false;
}
else
{
if (builder.Length > 0)
{
builder.Append(", ");
}
builder.Append(error.Text);
}
}
MessageBox.Show(builder.ToString()); // List concatenated subitems
}
下面是解决分隔符问题的另一种方法:
foreach (ListViewItem errors in HazmatPackageErrorListview.Items)
{
StringBuilder builder = new StringBuilder();
bool first = true;
string prefix = "";
foreach (ListViewItem.ListViewSubItem error in errors.SubItems)
{
if (first)
{
first = false;
}
else
{
builder.Append(prefix);
prefix = ", ";
builder.Append(error.Text);
}
}
MessageBox.Show(builder.ToString()); // List concatenated subitems
}
当然,有一个更简单的方法:
foreach (ListViewItem errors in HazmatPackageErrorListview.Items)
{
string[] bits = errors.SubItems.Skip(1)
.Select(item => item.Text)
.ToArray();
string errorLine = string.Join(", ", bits);
MessageBox.Show(errorLine);
}
这是基于Inferis的回答,但它使用了StringBuilder并避免了最终子字符串调用的需要:
foreach (ListViewItem errors in HazmatPackageErrorListview.Items)
{
StringBuilder builder = new StringBuilder();
bool first = true;
foreach (ListViewItem.ListViewSubItem error in errors.SubItems)
{
if (first)
{
first = false;
}
else
{
if (builder.Length > 0)
{
builder.Append(", ");
}
builder.Append(error.Text);
}
}
MessageBox.Show(builder.ToString()); // List concatenated subitems
}
下面是解决分隔符问题的另一种方法:
foreach (ListViewItem errors in HazmatPackageErrorListview.Items)
{
StringBuilder builder = new StringBuilder();
bool first = true;
string prefix = "";
foreach (ListViewItem.ListViewSubItem error in errors.SubItems)
{
if (first)
{
first = false;
}
else
{
builder.Append(prefix);
prefix = ", ";
builder.Append(error.Text);
}
}
MessageBox.Show(builder.ToString()); // List concatenated subitems
}
当然,有一个更简单的方法:
foreach (ListViewItem errors in HazmatPackageErrorListview.Items)
{
string[] bits = errors.SubItems.Skip(1)
.Select(item => item.Text)
.ToArray();
string errorLine = string.Join(", ", bits);
MessageBox.Show(errorLine);
}
如果可以使用Linq,请使用String.Join(),这样读起来容易得多:
foreach (ListViewItem HazPackErrItems in HazmatPackageErrorListview.Items)
{
string HazPackErrRow = string.Join(", ", HazPackErrItems.SubItems.Skip(1).Select(s => s.Text).ToArray())
MessageBox.Show(HazPackErrRow); // List concatenated subitems
}
如果可以使用Linq,请使用String.Join(),这样读起来容易得多:
foreach (ListViewItem HazPackErrItems in HazmatPackageErrorListview.Items)
{
string HazPackErrRow = string.Join(", ", HazPackErrItems.SubItems.Skip(1).Select(s => s.Text).ToArray())
MessageBox.Show(HazPackErrRow); // List concatenated subitems
}
在开始处添加逗号,那么您只需执行一次检查,而不是每次迭代都执行一次检查
string HazPackErrRow = "";
foreach (ListViewItem.ListViewSubItem HazPackErrSub in HazPackErrItems.SubItems)
{
HazPackErrRow += "," + " " + HazPackErrSub.Text;
}
// Remove comma before first element of string.
if(HazPackErrRow.Length > 0)
HazPackErrRow = HazPackErrRow.Substring(1);
编辑:
嗯,别理我,我看错了问题。在开头加上逗号,那么你只需要做一次检查,而不是每次迭代都检查一次
string HazPackErrRow = "";
foreach (ListViewItem.ListViewSubItem HazPackErrSub in HazPackErrItems.SubItems)
{
HazPackErrRow += "," + " " + HazPackErrSub.Text;
}
// Remove comma before first element of string.
if(HazPackErrRow.Length > 0)
HazPackErrRow = HazPackErrRow.Substring(1);
编辑:
嗯,别理我,我误解了这个问题。。。。然后重写它以使用StringBuilder:)是的,但他不是这么要求的:。。。然后重写它以使用StringBuilder:)是的,但他不是这么要求的。:)这样,字符串就以逗号开头。我正在修复:P我真的不喜欢你对我之前评论的问题的解决方案。。。看起来有点老土。我更喜欢那种方式,而不是早点把它从结尾处取下来。不过还有另一种方法。。。我会编辑。@乔恩SKET,我认为这个方法更好(我可以接受,虽然我会先中断,而不是用较大的IF)。P我真的不喜欢你对我之前评论的问题的解决方案。。。看起来有点老土。我更喜欢那种方式,而不是早点把它从结尾处取下来。不过还有另一种方法。。。我会编辑。@Jon Skeet,我认为该方法更好(我也可以接受,不过我会先中断而不是使用更大的if)。您需要调用ToArray-String。Join不适用于IEnumerable。您需要调用ToArray-String。Join不适用于IEnumerable。