代码之家  ›  专栏  ›  技术社区  ›  grenade

优雅的分弦

  •  4
  • grenade  · 技术社区  · 15 年前

    我正在寻找一种更好的方法来完成下面的代码块,它是emailAddress类/对象的一部分。在我看来,部件数组是笨重的,我想知道是否没有一个使用tuples或linq的一行程序可以将其整理一点。

    另外,对于电子邮件地址的第一部分,什么属性名比“别名”更好?

    public string Alias { get; private set; }
    public string Domain { get; private set; }
    private void Split(string emailAddress)
    {
        var parts = emailAddress.Split(new[] { '@' });
        Alias = parts[0];
        Domain = parts[1];
    }
    
    2 回复  |  直到 15 年前
        1
  •  5
  •   Jon Skeet    15 年前

    好吧,如果你利用参数数组,它就不那么笨重了:

    var parts = emailAddress.Split('@');
    

    或者(为了避免每次都创建一个新数组),您可以重用现有数组:

    private static readonly char[] EmailSplitter = new char[] {'@'};
    ...
    var parts = emailAddress.Split(EmailSplitter);
    

    除此之外,我不认为它特别笨重——尽管如果这就是 EmailAddress 类可以,我将在构造函数(或静态方法)中这样做,并使对象不可变。

    您可能希望使用“localpart”而不是“alias”,这与RFC-822是一致的。

        2
  •  0
  •   Nanook    15 年前

    我想说那很好。

    另一种方法是使用正则表达式,但是除了能够在拆分格式的同时验证格式之外,您不会获得太多的收益。