代码之家  ›  专栏  ›  技术社区  ›  Richard J Foster

使用String.Format时,如果字符串值不为null或空,有没有简单的方法在其周围添加括号

  •  7
  • Richard J Foster  · 技术社区  · 14 年前

    我正在尝试隔离(为了本地化的目的)一些消息的格式。在其中一个例子中,我有几个参数,其中一些可能是空字符串。这里可能需要一个例子。。。。

    参数一 某个消息参数1(参数2)

    如果参数是 字符串。空 我希望结果是 某个消息参数1

    如果 参数二 如果是一个数值,那么我可以使用如下内容:

    String.Format("Test {0}{1:' ('#')'}", "Parameter one", 12);

    这正如我所期望的那样工作——特别是如果第二个参数为null,那么输出就只是

    澄清:

    6 回复  |  直到 14 年前
        1
  •  4
  •   Chris Marisic    14 年前

    您可以通过实现 IFormatProvider and ICustomFormatter

    然后调用它作为

    var stringValue = string.Format(new NewCustomStringFormatInfo(),
         "Test {0}{1:' ('#')'}", "Parameter one", 12)
    
        2
  •  2
  •   Andy_Vulhop    14 年前

    取决于你的情况,但你可以

    string.Format(yourFormatString, paramOne, paramTwo).Replace("()", "");
    

    没有保证,因为它不是傻瓜式的,并且假设如果paramtow2是空的,那么结果字符串将只有“()”。

        3
  •  2
  •   Andy_Vulhop    14 年前

    您可以创建一个扩展方法来帮助处理这个问题,并使其更加简洁。

    public static string SomeWellNamedExtension(this string s)
    {
        if(string.IsNullOrEmpty(s))
            return "";
    
        return string.Format("({0})", s);
    }
    

    此方法将处理空/空检查和参数。这是一个非常专业的方法,所以几乎在其他任何地方都不可能有用。但是你的代码是这样的:

    string.Format("Test {0}{1}, paramOne, paramTwo.SomeWellNamedExtension());
    

    然而,ymmv。这将影响格式字符串,因为paren不再是它的职责。我想不出有多少超优雅的方法来处理您正在讨论的用例。

        4
  •  1
  •   Neil Barnwell    14 年前

    除非你定义一个函数将一个值括在方括号中,否则我看不出你是如何内联的?

    一个简单的例子:

    string.Format("Some message {0} {1}", "Parameter one", EncloseInParenthsisIfNotEmpty(""))
    
    public string EncloseInParenthsisIfNotEmpty(string input)
    {
        if (string.IsNullOrEmpty(input)) return "";
        return string.Format("({0})", input);
    }
    
        5
  •  0
  •   Mau    14 年前
    var s = System.String.IsNullOrEmpty(param2) ? string.Format(...) : string.Format(...)
    
        6
  •  0
  •   Grzenio    14 年前

    您可以编写自己的String.Format包装器(未测试):

    string MyFormat(string format, params object[] args)
    {
      object[] newArgs = new object[args.Length];
      for(int i=0; i<args.Length; i++)
      {
        if(args[i] is string)
        {
          newArgs[i] = String.IsNullOrEmpty(args[i] as string) ? "" : string.Format("({0})", args[i]);
        }
        //numeric cases etc
        else
        { 
          newArgs[i]=args[i];
        }
      }
      return string.Format(format, newArgs);
    }