格式化字符串对象的最佳方法

时间:2012-07-09 15:19:50

标签: c# string

我想创建一个像这样的字符串对象

string data = "85-null-null-null-null-price-down-1-20";   // null if zero

我有这样的方法。

 public static DataSet LoadProducts(int CategoryId, string Size, 
                                   string Colour, Decimal LowerPrice, 
                                   Decimal HigherPrice, string SortExpression, 
                                   int PageNumber, int PageSize, 
                                   Boolean OnlyClearance)
 {
      /// Code goes here 
      /// i am goona pass that string to one more method here

      var result = ProductDataSource.Load(stringtoPass) // which accepts only the above format

 }

我知道我可以使用StringBuilder,但使用它需要太多代码行。我在这里寻找一个简约的解决方案。

3 个答案:

答案 0 :(得分:7)

您可以这样做:

return string.Format("{0}-{1}-{2}-{3}-{4}-{5}-{6}-{7}-{8}",
                     CategoryId,
                     Size ?? "null", 
                     Colour ?? "null",
                     LowerPrice != 0 ? LowerPrice.ToString() : "null",
                     HigherPrice != 0 ? HigherPrice.ToString() : "null",
                     SortExpression ?? "null",
                     PageNumber != 0 ? PageNumber.ToString() : "null",
                     PageSize != 0 ? PageSize.ToString() : "null", 
                     OnlyClearance);

为方便起见,您可以创建扩展方法:

public static string NullStringIfZero(this int value)
{
    return value != 0 ? value.ToString() : "null";
}

public static string NullStringIfZero(this decimal value)
{
    return value != 0 ? value.ToString() : "null";
}

使用它们如下:

return string.Format("{0}-{1}-{2}-{3}-{4}-{5}-{6}-{7}-{8}",
                     CategoryId,
                     Size ?? "null", 
                     Colour ?? "null",
                     LowerPrice.NullStringIfZero(),
                     HigherPrice.NullStringIfZero(),
                     SortExpression ?? "null",
                     PageNumber.NullStringIfZero(),
                     PageSize.NullStringIfZero(),
                     OnlyClearance);

答案 1 :(得分:5)

string foo = String.Format("{0}-{1}-{2}-{3}-{4}-{5}-{6}-{7}-{8}",
                           CategoryId,
                           Size ?? "null" ... );

答案 2 :(得分:2)

请使用您喜欢的格式覆盖对象的ToString方法并调用Object.tostring()方法

评论后请求的示例:

public class Foo
{
  public string Field1 {get; private set;}
  public string Field2 {get; private set;}

   public override string ToString()
   {
      return string.Format("Field1 = {0} , Field2 = {1}", Field1, Field2);
   }
}

现在这样做的好处是:

  1. 在您的方法中,您只能使用Foo
  2. 类型的1个参数
  3. 当您调试并在断点处停止时添加foo对象以观察您将看到字符串表示
  4. 如果你决定打印所有你需要做的是Console.WriteLine(foo)