我有一个具有一些属性的对象
例如。
Employee
-Name
-Company
我想为他们的名字和公司获取一个格式化的字符串,用“ - ”分隔。
现在我可以做string.Join("-", e.Company, e.Name)
但如果公司为空或空,我会得到“ - fred”。
是否有更好的内置方式来考虑这些空白/空字符串。我以前使用一些简短的ifs来包含 - 在string.format中,但它看起来很乱。
即。
string.Format("{0}{1}{2}", e.Company, !string.IsNullOrWhiteSpace(e.Company) ? "-": string.Empty, e.Name);
答案 0 :(得分:3)
您可以尝试使用Join
方法中的内联三元组:
string.Join("-", string.IsNullOrEmpty(e.Company) ? "fired" : e.Company, e.Name)
编辑(我误读了#f; 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"));
输出:
公司-佛瑞德
佛瑞德
公司
公司-4 /1979分之4
公司-佛瑞德-4 /1979分之4
答案 1 :(得分:0)
我怀疑你要比现有的更加简化,但是如果经常使用这种模式,你可以将分隔符处理移动到扩展方法以“清理”一点; < / p>
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("-");
}
}
答案 2 :(得分:0)
采用内联三元可能更清晰:
= string.IsNullOrWhiteSpace(e.Company) ? e.Name : string.Join("-", e.Company, e.Name);
答案 3 :(得分: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());