2016-07-13 14 views
0

ASP.NET Webアプリケーションからデータベースに送信された電子メールを維持したいと考えています。アイデアは、電子メールの形式がデータベースに格納されているということでした。データベースに格納されている文字列を補間する

問題は例えば、電子メールは、注文固有の情報を含めるべきであるということです。

はご注文1234は、私が「何

を受けてきた、あなたのためにジョン・スミスのために

をありがとう私が達成しようとしているのは、このように格納されるデータベース列の値に文字列を使用したことです。

は、ご注文{o.customer}ありがとうござい

受信されたご注文{o.id}

私はのように、文字列の補間を行うことが可能であるかどうかに興味がどこ値は既にフォーマットされた文字列にあります。

型「にSystem.FormatException」の例外がmscorlib.dll で発生したが、ユーザーコード

追加情報で処理されませんでした:入力文字列はありませんでした私はString.Format(dbEmailString)を使用しようとする場合には、例外が私を投げます正しい形式で

+0

コードはありますか? – sstan

答えて

4

文字列補間はコンパイル時の機能です。あなたが定期的にString.Formatを使ってやりたいことができます。

var formattedEmail = String.Format("Thank you for your order {0}, your order {1} has been received", o.customer, o.id); 

あなたが値を持つ様々な異なるプレースホルダを交換する必要性を持っていれば、おそらくあなたは、よりダイナミックなテンプレートシステムを探している必要があり、非常に基本的なものはString.Replaceで行うことができます。

結論として、コード内の変数をこのようにしてストアドストリングから直接参照することはできません。実行時に何らかの方法でストリングを処理する必要があります。

+0

これは私の素早く策定された質問に答えたと思います。私が必要とするのは、プレースホルダの数が異なる可能性があるので、本質的にはダイナミックではありません。おそらくString.Replaceを使って別の方法でやり直そうとしなければならないと思います。 – johnnyCasual

+0

@johnnyCasualもしあなたがそのルートに行くなら、あなたがすでに持っているものと全く同じプレースホルダーを保つことができます。例えば、 email.Replace( "{o.customer}"、o.customer) ' - あなたが望むならば、あなたは変数と同じ名前を保つことができます。 –

-1

私はあなたがC#6.0の新機能を意味すると思う:https://msdn.microsoft.com/en-us/library/dn961160.aspx

私はそれについて読んで、まだ経験がありません。しかし、それはcustomeridの変数で動作しなければならず、オブジェクトのプロパティでは動作しないかどうかはわかりません。

string customer = o.customer; int id = o.id; string msg = $"Thank you for your order {customer},your order {id} has been received";

あなたに正しい結果を与えます。 (VS 2015および.NET 4.6が提供さ。)

string msg = $"Thank you for your order {o.customer}, your order {o.id} has been received";` 

は、それは私が何の手がかりを持っていない、動作する可能性があります。

+0

これを達成しようとしましたが、問題は文字列msg = $ dbEmailStringを使用できないことでした。文字列変数$ prefixが許可されていません – johnnyCasual

+0

私はこの文章が間違っていました: "アイデアは電子メールの形式がデータベースに格納されているということでした。補間された文字列はコンパイル時の機能なので、この場合は使用できません。 –

0

c#6では、補間された文字列式は、式を含むテンプレート文字列のように見えます。 String.Format()プレースホルダのように見えますが、インデックスの代わりに、中括弧の中にある式自体です。
C#6のString.Format()は、コンパイラがString.Format()のように扱う文法的な砂糖です。 2015対中OPで式を表示する

たとえば、:

class Program 
{ 
    static void Main(string[] args) 
    { 

     dynamic order = new {customer = "Robert", id=123}; 
     PrintString(order);    
    } 


    static void PrintString(dynamic o) 
    { 
     var exp1 = $"Thank you for your order { o.customer}"; 
     var exp2 = $"your order { o.id} has been received"; 
     Console.WriteLine(exp1); 
     Console.WriteLine(exp2); 

    } 

} 

出力は次のようになります。

ご注文123は

を受信した

ロバート

ご注文ありがとうございます

フォーマット済みの式をデータベースから取得し、上の例で説明したように、それらの接頭辞に "$"を付けることができます。

VS 2013の下には、nugetパッケージとしてプロジェクトに新しいコンパイラをインストールすることができます。 インストール・パッケージMicrosoft.Net.Compilers

+0

私の答えが実際の例とOPのexcptionを解決する場合、なぜ-1。 –

+0

_ "上記の例で説明したように、書式設定された式をデータベースから取得し、" $ "の接頭辞を付けることができます。"補間、データベースの動的文字列[動作しません](http://i.stack.imgur.com/0Wnq6.png)(http://i.stack.imagur.com/0Wnq6.png) /c6ykG.png) –

関連する問題