动态字符串.格式取决于参数

本文关键字:参数 取决于 格式 字符串 动态 | 更新日期: 2023-09-27 18:09:36

给出以下例子:

string amountDisplay = presentation.Amount == 1 ? "" : String.Format("{0} x ", presentation.Amount);

无论如何都可以使用String。格式,所以它的格式取决于属性,而不必做一个条件的'值'的参数?

另一个用例:

String.Format("({0}) {1}-{2}", countryCode, areaCode, phonenumber); 

如果我只有电话号码,我将以"()-5555555"这样的内容结束,这是不可取的。

另一个用例:

String.Format("my {0} has {1} cat[s]", "Aunt", 3) 

在本例中,如果值> 1,我希望在[]中包含s。

String是否有黑色语法?根据参数值或空值删除代码部分的格式?

谢谢。

动态字符串.格式取决于参数

不完全是。当然,你可以为复数[s]破解一些东西,但它不会是一个通用的解决方案来匹配你所有的用例。

无论如何都应该检查输入的有效性。如果您希望areaCode不为空,并且它是像string一样的可空类型,请在方法开始时进行一些检查。例如:

public string Foo(string countryCode, string areaCode, string phoneNumber)
{
    if (string.IsNullOrEmpty(countryCode)) throw new ArgumentNullException("countryCode");
    if (string.IsNullOrEmpty(areaCode)) throw new ArgumentNullException("areaCode");
    if (string.IsNullOrEmpty(phoneNumber)) throw new ArgumentNullException("phoneNumber");
    return string.Format(......);
}

UI的工作不是补偿用户输入的一些验证错误。如果数据错误或丢失,请不要继续。它只会给你带来奇怪的bug和很多痛苦。

您也可以尝试PluralizationServices服务。像这样:

using System.Data.Entity.Design.PluralizationServices;
string str = "my {0} has {1} {3}";
PluralizationService ps = PluralizationService.CreateService(CultureInfo.GetCultureInfo("en-us"));
str = String.Format(str, "Aunt", value, (value > 1) ? ps.Pluralize("cat") : "cat");

尝试使用条件运算符:

string str = "my {0} has {1} cat" + ((value > 1) ? "s" : "");
str = String.Format(str, "Aunt", value);

只解决第二个问题,但是:

int x = 3;
String.Format("my {0} has {1} cat{2}", "Aunt", x, x > 1 ? "s" : "");