C# 相关项目清单

C# 相关项目清单,c#,.net,C#,.net,我有一个文本文件,其格式类似于以下内容: # example1.com;example2.com;example3.com example4.net;example6.org example7.uk;example8.io;ab123example4.net # 每行定义一个公司拥有的域。 每行可以有2个或更多域 很遗憾,我无法修改文件的格式 我不太熟悉c#(我通常在Linux/Unix上使用bash/sh,我可能默认使用grep),我正在尝试扩展一些现有的c#软件,以添加一个检查两个域是否属

我有一个文本文件,其格式类似于以下内容:

#
example1.com;example2.com;example3.com
example4.net;example6.org
example7.uk;example8.io;ab123example4.net
#
每行定义一个公司拥有的域。 每行可以有2个或更多域

很遗憾,我无法修改文件的格式

我不太熟悉c#(我通常在Linux/Unix上使用bash/sh,我可能默认使用grep),我正在尝试扩展一些现有的c#软件,以添加一个检查两个域是否属于同一家公司的检查

目前,我正在阅读以下文件:

private List<string> _CompanyOwnedDomains;

private String CompanyOwnedDomainsFileName = Environment.GetEnvironmentVariable(
                "DomainChecker",
                EnvironmentVariableTarget.Machine) + 
            @"Path\To\CompanyOwnedDomains.config";

// Various error checking happens here

_CompanyOwnedDomains = File
                        .ReadAllLines(CompanyOwnedDomainsFileName)
                        .Where(line => !String.IsNullOrEmpty(line))
                        .Where(line => !line.StartsWith("#"))
                        .Select(line => line.ToLower())
                        .ToList();
  • 是否有方法检查两个值是否存在于同一列表项中

  • 对于“example4.net”或类似查询,Contains方法是否返回ab123example4.net

  • 使用不同的变量类型(如字典)会更好吗

  • 是,只需将条件添加到筛选器:

    var match = _CompanyOwnedDomains
        .FirstOrDefault(domains => domains.Contains(domainA.ToString()
                                && domains.Contains(domainB.ToString());
    
  • 是的,
    example4.net
    包含在
    ab123 example4.net

  • 您可以使用列表而不是
    列表

  • 是,只需将条件添加到筛选器:

    var match = _CompanyOwnedDomains
        .FirstOrDefault(domains => domains.Contains(domainA.ToString()
                                && domains.Contains(domainB.ToString());
    
  • 是的,
    example4.net
    包含在
    ab123 example4.net

  • 您可以使用列表而不是
    列表


    我认为您需要另一个通行证才能正确地从文件中提取域名

    首先,使用,然后您还应该检查由所有空格组成的行,而不仅仅是空行,最后,在将行转换为小写后,您可以将其拆分为分号,并使用SelectMany将生成的数组添加到列表中。
    如果需要删除域副本,可以使用Distinct

    _CompanyOwnedDomains = File
            .ReadLines(CompanyOwnedDomainsFileName)
            .Where(line => !String.IsNullOrWhiteSpace(line))
            .Where(line => !line.StartsWith("#"))
            .SelectMany(line => line.ToLower().Split(';'))
            .Distinct().ToList();
    
    现在,每个域都与其他域分离,您不必担心Contains的误报,因为您可以使用列表中的
    Any
    方法检查是否有匹配项用于搜索

    bool exist = _CompanyOwnedDomains.Any(x => x == "example4.net" || x == "example8.io");
    

    我认为您需要另一个通行证才能正确地从文件中提取域名

    首先,使用,然后您还应该检查由所有空格组成的行,而不仅仅是空行,最后,在将行转换为小写后,您可以将其拆分为分号,并使用SelectMany将生成的数组添加到列表中。
    如果需要删除域副本,可以使用Distinct

    _CompanyOwnedDomains = File
            .ReadLines(CompanyOwnedDomainsFileName)
            .Where(line => !String.IsNullOrWhiteSpace(line))
            .Where(line => !line.StartsWith("#"))
            .SelectMany(line => line.ToLower().Split(';'))
            .Distinct().ToList();
    
    现在,每个域都与其他域分离,您不必担心Contains的误报,因为您可以使用列表中的
    Any
    方法检查是否有匹配项用于搜索

    bool exist = _CompanyOwnedDomains.Any(x => x == "example4.net" || x == "example8.io");
    

    快告诉我吧,回答得很好谢谢,读了一些之后,哈希集似乎是正确的方向。我认为可能会有多种情况,但不太确定如何处理。请告诉我,回答得好,谢谢,在阅读了一些之后,哈希集似乎是正确的方向。我认为可能有多种情况,但不太确定如何处理。谢谢。这当然让事情变得容易了。我读的c#越多,我就越喜欢它作为一种语言。我没有意识到每行中都有CSV,介意我用这个建议更新我的答案吗?这看起来当然更好。我认为这个答案应该提到在这种情况下使用
    ReadAllLines()
    的低效性。我认为OP最好使用
    ReadLines()
    对吗?谢谢。这当然让事情变得容易了。我读的c#越多,我就越喜欢它作为一种语言。我没有意识到每行中都有CSV,介意我用这个建议更新我的答案吗?这看起来当然更好。我认为这个答案应该提到在这种情况下使用
    ReadAllLines()
    的低效性。我认为OP最好使用
    ReadLines()
    对吗?
    bool exist = _CompanyOwnedDomains.Any(x => x == "example4.net" || x == "example8.io");