在C#中防止重复的字符串

时间:2009-11-18 15:26:04

标签: c#

我的代码中有一个字符串,它连接数据库中各个表的电子邮件地址,然后显示在cc字段的outlook中。

我想要的只是过滤字符串,以便字符串不包含任何重复的电子邮件地址。换句话说,我不希望在输出中再次重复单个电子邮件地址。

请帮助

DataSet ds = DatabaseFunctions.getEmailsBySPROC("getEmailByCircuit", sql_CircuitEmail);

if (ds != null)
{
    for (int idx = 0; idx < ds.Tables[0].Rows.Count; idx++)
    {
        emailList = emailList + ds.Tables[0].Rows[idx]["Email"].ToString() + ";";
    }
}

这是从一个表中退出的代码..

有另一个代码从另一个表中检索.. \和字符串是电子邮件列表分开;分号

6 个答案:

答案 0 :(得分:20)

第一个也是最明显的建议是在数据库方面将其过滤掉;这意味着从数据库中检索数据时,如果可能,请添加“distinct”子句,以便只获得不同的电子邮件地址。

否则,您可以将所有电子邮件地址添加到HashSet&lt; string&gt;它会自动为您复制重复项。

重新编写代码:

DataSet ds = DatabaseFunctions.getEmailsBySPROC("getEmailByCircuit", sql_CircuitEmail);

if (ds != null)
{
    DataTable table = ds.Tables[0];
    HashSet<string> emails = new HashSet<string>();
    for (int idx = 0; idx < table.Rows.Count; idx++)
    {
        emails.Add(table.Rows[idx]["Email"].ToString());
    }
}

StringBuilder result = new StringBuilder();
foreach(string email in emails)
{
    result.Append(email + ";");
}

emailList = result.ToString();

答案 1 :(得分:4)

var emails = new HashSet<String>();
var email = " Blah@blah.com ".Trim().ToLower();
emails.Add(email);

答案 2 :(得分:3)

using System;
using System.Collections.Generic;
using System.Linq;

namespace UniqueEmailAddresses
{
    class Program
    {
        static void Main(string[] args)
        {
            const string emailList
            = "bob@example.com; sally@example.com; fred@example.com; sally@example.com";
            var result = emailList.Replace(" ", "").Split(';').Distinct();
            foreach( var addy in result)
            {
                Console.WriteLine(addy);
            }
            Console.ReadKey();

        }
    }
}

打印

bob@example.com
sally@example.com
fred@example.com

莎莉只出现一次。

答案 3 :(得分:1)

正如BFree所说,你可以(假设你没有从数据库中提取大量记录)轻松地执行以下操作:

var emails = new HashSet<string>(yourStrings);

它应该自动过滤掉它们,你可以使用HashSet集合轻松迭代。

答案 4 :(得分:1)

 DataSet ds = DatabaseFunctions.getEmailsBySPROC("getEmailByCircuit", sql_CircuitEmail);
 if (ds != null)
 {
     for (int idx = 0; idx < ds.Tables[0].Rows.Count; idx++)
     {
         emailList = emailList + ds.Tables[0].Rows[idx]["Email"].ToString() + ";";
     }
 }

从一张桌子中挑选出来......然后我也会从另一张桌子上挑选它,

答案 5 :(得分:0)

添加到集合而不是集合包含。

List<string> list = new List<string>();

if (!list.contains("mail") )
{
  list.add("mail");
}