2012-04-19 22 views
0

内部値に応じてデータベースの値で置き換えられるプレースホルダを持つテンプレート文字列を作成しようとしています。 すなわち、テンプレートは次のようになります。内部値に応じて文字列内の値を置換する

No: {Job_Number} 
Customer: {Cust_Name} 
Action: {Action} 

テンプレートは、任意の列の値は括弧内であることで、何にでも変更することができ.. 私が取得するためのエレガントな方法を把握することはできません内部の値を置き換えて、値で置き換えてください。

答えて

2

これは、このために私の解決策となっています。

// this is a MatchEvaluater for a regex replace 
string me_setFormatValue(Match m){ 
    // this is the key for the value you want to pull from the database 
    // Job_Number, etc... 
    string key = m.Groups[1].Value; 

    return SomeFunctionToGetValueFromKey(key); 
} 


void testMethod(){ 
    string format_string = @"No: {Job_Number} 
Customer: {Cust_Name} 
Action: {Action}"; 

    string formatted = Regex.Replace(@"\{([a-zA-Z_-]+?)\}", format_string, me_SetFormatValue); 
} 
+0

それはそのようなこと、効率ワイズのための正規表現を使用するように動作しますが、その恥:

は、あなたがこのような何かを行うことができ、あなたのフォーマット文字列を与えます。 – SimpleVar

+0

私は、彼が重要なループでこれを持っていない限り、パフォーマンスヒットは無視できると思う。 – climbage

+0

私は理論が好きです。しかし正規表現は機能しません。\ {unregoised escape symbol}です。 – michael

0

私はそれを表現するための構造体またはクラスを持ち、ToStringをオーバーライドします。 文字列に書式設定する論理的なクラスが既にあるでしょう。

public class StringHolder 
{ 
    public int No; 
    public string CustomerName; 
    public string Action; 

    public override string ToString() 
    { 
     return string.Format("No: {1}{0}Customer: {2}{0}Action: {3}", 
          Environment.NewLine, 
          this.No, 
          this.CustomerName, 
          this.Action); 
    } 
} 

次に、プロパティを変更して、値を更新するためのインスタンスのインスタンスをもう一度挿入します。

あなたがそうのようなStringHolderクラスは、より一般的にすることができます。

public class StringHolder 
{ 
    public readonly Dictionary<string, string> Values = new Dictionary<string, string>(); 

    public override string ToString() 
    { 
     return this.ToString(Environment.NewLine); 
    } 

    public string ToString(string separator) 
    { 
     return string.Join(separator, this.Values.Select(kvp => string.Format("{0}: {1}", kvp.Key, kvp.Value))); 
    } 

    public string this[string key] 
    { 
     get { return this.Values[key]; } 
     set { this.Values[key] = value; } 
    } 
} 

そして使い方は次のようになります。

var sh = new StringHolder(); 

sh["No"] = jobNum; 
sh["Customer"] = custName; 
sh["Action"] = action; 

var s = sh.ToString(); 
関連する問題