-1

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

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

 }

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

4

3 回答 3

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);
于 2012-07-09T15:24:10.053 回答
5
string foo = String.Format("{0}-{1}-{2}-{3}-{4}-{5}-{6}-{7}-{8}",
                           CategoryId,
                           Size ?? "null" ... );
于 2012-07-09T15:23:22.867 回答
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 类型的 1 个参数
  2. 当您在添加 foo 对象时调试并在断点处停止时,您将看到字符串表示
  3. 如果你决定打印你所要做的就是 Console.WriteLine(foo)
于 2012-07-09T15:21:11.450 回答