-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

 }

を使用できることはわかっていますが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 に答える