C# 防止在ListView上添加重复项

C# 防止在ListView上添加重复项,c#,linq,C#,Linq,是否有人可以给我LINQ代码,以避免在向ListView添加新项目时允许重复项目 下面是我当前使用正则表达式从剪贴板添加项目的代码 List<string> uri = new List<string>(); string URLPattern = cbRegEx.Text; string cb = Clipboard.GetText(); uri.Clear(); MatchCollection mc = Regex.Matches(cb, URLPattern, R

是否有人可以给我LINQ代码,以避免在向ListView添加新项目时允许重复项目

下面是我当前使用正则表达式从剪贴板添加项目的代码

List<string> uri = new List<string>();
string URLPattern = cbRegEx.Text;
string cb = Clipboard.GetText();

uri.Clear();
MatchCollection mc = Regex.Matches(cb, URLPattern, RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
    uri.Add(m.Value);
}

LV_Url.BeginUpdate();
foreach (var Uri in uri)
{
    ListViewItem lv = new ListViewItem();
    lv.Text = (LV_Url.Items.Count + 1).ToString();
    lv.SubItems.Add(GetUrlFileName(Uri));
    lv.SubItems.Add(Uri);
    LV_Url.Items.Add(lv);
    LV_Url.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
}
LV_Url.EndUpdate();
使用HashSet而不是List,它将忽略在列表中允许重复值

HashSet<string> list = new HashSet<string>();
list.Add("duplicate");
list.Add("duplicate");
Console.WriteLine(list.Count);//output 1
使用HashSet而不是List,它将忽略在列表中允许重复值

HashSet<string> list = new HashSet<string>();
list.Add("duplicate");
list.Add("duplicate");
Console.WriteLine(list.Count);//output 1
您可以使用Distinct删除副本

MatchCollection mc = Regex.Matches(cb, URLPattern, RegexOptions.IgnoreCase);
foreach (Match m in mc.Distinct())
{
    uri.Add(m.Value);
}

您可以使用Distinct删除副本

MatchCollection mc = Regex.Matches(cb, URLPattern, RegexOptions.IgnoreCase);
foreach (Match m in mc.Distinct())
{
    uri.Add(m.Value);
}


要从剪贴板获取不同的字符串集合,并将项目插入ListView(重复项除外),请执行以下操作:

var url=新列表; //... //从剪贴板中获取它们。。。 //... //仅添加新URL: LV_Url.BeginUpdate; LV_Url.Items.AddRange 网址 不同的 .Whereurl=>LV_Url.Items.Count==0 ||LV_Url.findItemWithTexture,true,0==null .Selecturl,i=>new ListViewItemnew[] { LV_Url.Items.Count+i+1.ToString, GetUrlFileNameurl, 网址 } .托雷; //可选择以适合内容。。。 LV_Url.Columns.Cast.ToList.ForEachc=>c.Width=-2; LV_Url.EndUpdate; 或直接从剪贴板添加:

LV_Url.BeginUpdate; LV_Url.Items.AddRange Regex.matcheslipboard.GetText, URLPattern,RegexOptions.IgnoreCase | RegexOptions.Multiline .Cast.Selectm=>m.Value//或某些m.Groups[n]。值。。。 不同的 .Whereurl=>LV_Url.Items.Count==0 ||LV_Url.findItemWithTexture,true,0==null .Selecturl,i=>new ListViewItemnew[] { LV_Url.Items.Count+i+1.ToString, GetUrlFileNameurl, 网址 } .托雷; LV_Url.Columns.Cast.ToList.ForEachc=>c.Width=-2; LV_Url.EndUpdate;
要从剪贴板获取不同的字符串集合,并将项目插入ListView(重复项除外),请执行以下操作:

var url=新列表; //... //从剪贴板中获取它们。。。 //... //仅添加新URL: LV_Url.BeginUpdate; LV_Url.Items.AddRange 网址 不同的 .Whereurl=>LV_Url.Items.Count==0 ||LV_Url.findItemWithTexture,true,0==null .Selecturl,i=>new ListViewItemnew[] { LV_Url.Items.Count+i+1.ToString, GetUrlFileNameurl, 网址 } .托雷; //可选择以适合内容。。。 LV_Url.Columns.Cast.ToList.ForEachc=>c.Width=-2; LV_Url.EndUpdate; 或直接从剪贴板添加:

LV_Url.BeginUpdate; LV_Url.Items.AddRange Regex.matcheslipboard.GetText, URLPattern,RegexOptions.IgnoreCase | RegexOptions.Multiline .Cast.Selectm=>m.Value//或某些m.Groups[n]。值。。。 不同的 .Whereurl=>LV_Url.Items.Count==0 ||LV_Url.findItemWithTexture,true,0==null .Selecturl,i=>new ListViewItemnew[] { LV_Url.Items.Count+i+1.ToString, GetUrlFileNameurl, 网址 } .托雷; LV_Url.Columns.Cast.ToList.ForEachc=>c.Width=-2; LV_Url.EndUpdate;
最后谢谢你的回答。但我用的是: 感谢@JQSOFT

        LV_Url.BeginUpdate();
        LV_Url.Items.AddRange(Regex.Matches(Clipboard.GetText(), URLPattern, RegexOptions.IgnoreCase | RegexOptions.Multiline)
            .Cast<Match>().Select(m => m.Value)
            .Where(url => LV_Url.Items.Count == 0 || LV_Url.FindItemWithText(url, true, 0) == null)
            .Select((url, i) => new ListViewItem(new[]
            {
                (LV_Url.Items.Count + i + 1).ToString(),
                Util.GetUrlFileName(url),
                url

            })).ToArray());
        LV_Url.EndUpdate();

最后谢谢你的回答。但我用的是: 感谢@JQSOFT

        LV_Url.BeginUpdate();
        LV_Url.Items.AddRange(Regex.Matches(Clipboard.GetText(), URLPattern, RegexOptions.IgnoreCase | RegexOptions.Multiline)
            .Cast<Match>().Select(m => m.Value)
            .Where(url => LV_Url.Items.Count == 0 || LV_Url.FindItemWithText(url, true, 0) == null)
            .Select((url, i) => new ListViewItem(new[]
            {
                (LV_Url.Items.Count + i + 1).ToString(),
                Util.GetUrlFileName(url),
                url

            })).ToArray());
        LV_Url.EndUpdate();

我尝试了此操作,但出现了错误:“0”的InvalidArgument=值对“startIndex”无效。@zackmark15是的,当ListView为空时,您将得到此结果。我会修好的。哇,现在好了。非常感谢这对我很有帮助如果我再次有问题的话:我只是在用自己的工具学习,我正在创建我的个人工具。我尝试了这一点,但这是错误的:“InvalidArgument=Value'0'对'startIndex'无效”。@zackmark15是的,当ListView为空时,您会得到这个结果。我会修好的。哇,现在好了。非常感谢这对我很有帮助如果我再次有问题:我只是在学习我自己的工具,我正在创建我的个人工具请给我一个重复值示例。如果您希望哈希集不区分大小写,请使用此构造函数:new HashSetStringComparer.OrdinalIgnoreCase;给我一个重复值示例。如果希望HashSet不区分大小写,请使用以下构造函数:new HashSetStringComparer.OrdinalIgnoreCase;