【问题标题】:dynamic String.Format depending of params动态 String.Format 取决于参数
【发布时间】:2013-04-18 03:33:38
【问题描述】:

举个例子:

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

无论如何都可以使用 String.Format,因此它可以根据属性进行格式化,而不必对参数的“值”进行条件处理?

另一个用例:

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

如果我只有电话号码,我最终会得到类似“() -5555555”的东西,这是不可取的。

另一个用例:

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

在这种情况下,如果值 > 1,我想在 [] 中包含 s。

String.Format 是否有任何黑色“语法”根据参数值或 null 删除代码部分?

谢谢。

【问题讨论】:

标签: c#


【解决方案1】:

不是真的。当然,您可以为复数 [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 的工作。如果数据错误或丢失,请不要继续。它只会给你带来奇怪的错误和很多痛苦。

【讨论】:

    【解决方案2】:

    您也可以尝试 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");
    

    【讨论】:

      【解决方案3】:

      尝试使用条件运算符:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2016-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-28
          • 1970-01-01
          • 2021-07-08
          • 1970-01-01
          相关资源
          最近更新 更多