How to check if a string contains an array of values?

I have an array of valid email address domains. Given the email address, I want to find out if its domain is really

string[] validDomains = { "@test1.com", "@test2.com", "@test3.com" };
string email = "test@test1.com"

Is there a way to check if emailany of the values contain validDomainswithout using a loop?

+5
source share
8 answers

I would like to recommend the following code to you:

HashSet<string> validDomains = new HashSet<string>
    {
        "test1.com", "test2.com", "test3.com"
    };
const string email = "test@test1.com";

MailAddress mailAddress = new MailAddress(email);
if (validDomains.Contains(mailAddress.Host))
{
    // Contains!
}

HashSet.Contains Method is an O (1) operation; and array is O (n). So it HashSet<T>.Containsworks very fast. In addition, it HashSetdoes not save duplicate values, and it makes no sense to store them in your case.

MailAddress . ( ).

+10

, , HashSet , O (1):

string[] validDomains = { "@test1.com", "@test2.com", "@test3.com" };
HashSet<string> validDomainsHashSet = new HashSet<string>(validDomains);

string email = "test@test1.com";
string domain = email.Substring(email.IndexOf('@'));
bool isValidDomain = validDomainsHashSet.Contains(domain);

@ , , , :

string[] validDomains = { "test1.com", "test2.com", "test3.com" };
HashSet<string> validDomainsHashSet = new HashSet<string>(validDomains);

string email = "test@test1.com";
string domain = email.Substring(email.IndexOf('@') + 1);
bool isValidDomain = validDomainsHashSet.Contains(domain);
+5

LINQ ( ):

bool validEmail = validDomains
   .Any(d => email.EndsWith(d, StringComparer.OrdinalIgnoreCase));
+3
int index = email.IndexOf("@");
var domain = email.Substring(index)
return validDomains.Any(x=>x == domain);
+2

:

        string[] validDomains = { "@test1.com", "@test2.com", "@test3.com" };
        string email = "test@test1.com";
        if (validDomains.Contains(email.Substring(email.IndexOf("@"))))
        {

        }
+2

a :

    string[] validDomains = { "@test1.com", "@test2.com", "@test3.com" };
    string email = "test@test1.com";
foreach (string x in validDomains)
{
    if (email.Contains(x))
    {
        //  Do Something
    }
}

( LINQ):

if(validDomains.Any(s => email.Contains(s))) {
//Do Something 
}
+1

, - linq FirstOrDefault()

        string[] validDomains = { "@test5.com", "@test2.com", "@test3.com" };
        string email = "test@test1.com";

        var found = ((from domain in validDomains
                      where email.Contains(domain)
                      select domain).FirstOrDefault() != null);
+1
validDomains.Any(validDomain => email.EndsWith(validDomain))

See the IEnumerable.Any documentation for more details .

-3
source

All Articles