2

我有一个具有一些属性的对象

例如。

Employee
-Name
-Company

我想为他们的名字和公司获取一个格式化的字符串,用“-”分隔。

现在我可以做一个string.Join("-", e.Company, e.Name),但如果公司为空或为空,我会得到“-弗雷德”。

是否有更好的内置方法来考虑这些空白/空字符串。我以前使用一些简写的 if 来将 - 包含在 string.format 中,但它看起来很混乱。

IE。

string.Format("{0}{1}{2}", e.Company, !string.IsNullOrWhiteSpace(e.Company) ? "-": string.Empty, e.Name);
4

4 回答 4

3

您可以尝试在方法中使用内联三元组Join

string.Join("-", string.IsNullOrEmpty(e.Company) ? "fired" : e.Company, e.Name)

编辑(我误读了“fred”因为拼写错误被解雇了)。
正如另一个答案中提到的,扩展方法会清理代码。您将把丑陋的代码移动到不同的地方。

作为扩展方法的替代方法,我会推荐类似以下的方法,以便以后使用更多参数:

  public static string ExcludeEmptiesJoin(params string[] args) {
     string outValue = string.Empty;

     foreach (var arg in args.Where(s => !string.IsNullOrEmpty(s))) {
        if (string.IsNullOrEmpty(outValue)) {
           outValue = arg;
        } else {
           outValue = string.Join("-", outValue, arg);
        }
     }

     return outValue;
  }

用法:

 Console.WriteLine(ExcludeEmptiesJoin("Company", "Fred"));
 Console.WriteLine();
 Console.WriteLine(ExcludeEmptiesJoin("", "Fred"));
 Console.WriteLine();
 Console.WriteLine(ExcludeEmptiesJoin("Company", ""));
 Console.WriteLine();
 Console.WriteLine(ExcludeEmptiesJoin("Company", "", "4/4/1979"));
 Console.WriteLine();
 Console.WriteLine(ExcludeEmptiesJoin("Company", "Fred", "4/4/1979"));

输出:

公司-Fred

弗雷德

公司

公司-4/4/1979

公司-Fred-4/4/1979

于 2013-06-19T02:50:24.060 回答
0

我怀疑你是否会比你已经拥有的更简单,但如果要经常使用这种模式,你可以将分隔符处理移动到扩展方法来“清理”一点;

static class StringExtensions
{
    public static string RemoveLeadingOrTrailingToken(this string value, string token)
    {
        if (value.StartsWith(token))
            return value.Substring(token.Length);
        if (value.EndsWith(token))
            return value.Substring(0, value.IndexOf(token, StringComparison.Ordinal));

        return value;
    }
}

class Program
{
    static void Main(string[] args)
    {
        string s1 = "company";
        string s2 = "product";
        string result = String.Format("{0}-{1}", s1, s2).RemoveLeadingOrTrailingToken("-");
    }    
}
于 2013-06-19T04:11:37.533 回答
0

取出内联三元可能更干净:

= string.IsNullOrWhiteSpace(e.Company) ? e.Name : string.Join("-", e.Company, e.Name);
于 2013-06-19T04:36:34.327 回答
0

如果你有两个以上的属性,比如一个地址,这可以解决你的问题:

List<string> attributes = new List<string>(new string[] {
    e.Company, 
    e.Name, 
    e.Address});
attributes.RemoveAll(s => s == String.Empty);
String.Join("-", attributes.ToArray());
于 2013-06-19T04:51:23.883 回答