我试图使用一个使用FormatWith()的函数,我在C#中得到一个错误

时间:2012-12-11 22:32:26

标签: visual-studio-2010 c#-4.0

我正在尝试构建电子邮件模板。我得到的是假设是工作示例,但我在尝试让FormatWith()在其中一个函数中解析时遇到问题。

private static string PrepareMailBodyWith(string templateName, params string[] pairs)
{
    string body = GetMailBodyOfTemplate(templateName);

    for (var i = 0; i < pairs.Length; i += 2)
    {
        // wonder if I can bypass Format with and just use String.Format
        body = body.Replace("<%={0}%>".FormatWith(pairs[i]), pairs[i + 1]);
        //body = body.Replace("<%={0}%>",String.Format(pairs[i]), pairs[i + 1]);
    }
    return body;
}

3 个答案:

答案 0 :(得分:1)

对我来说,它看起来像extension method

您需要在文件顶部引用扩展方法所在的命名空间。

示例:

namespace MyApp.ExtensionMethods
{
    public class MyExtensions
    {    
        public static string FormatWith(this string target, params object[] args) 
        { 
            return string.Format(Constants.CurrentCulture, target, args); 
        }    
    }
}

...

using MyApp.ExtensionMethods;

...

private static string PrepareMailBodyWith(string templateName, params string[] pairs)
{
    string body = GetMailBodyOfTemplate(templateName);

    for (var i = 0; i < pairs.Length; i += 2)
    {
        // wonder if I can bypass Format with and just use String.Format
        body = body.Replace("<%={0}%>".FormatWith(pairs[i]), pairs[i + 1]);
        //body = body.Replace("<%={0}%>",String.Format(pairs[i]), pairs[i + 1]);
    }
    return body;
}

答案 1 :(得分:0)

尝试使用String.Format()代替,就像你建议的那样......

body = body.Replace(String.Format("<%={0}%>", pairs[i]), String.Format("<%={0}%>", pairs[i+1]);

这假设您希望格式化搜索字符串和替换字符串。

答案 2 :(得分:0)

我发现使用.Replace()然后跳过所有其他的箍更容易。谢谢你的建议。

        string email = emailTemplate
        .Replace("##USERNAME##", userName)
        .Replace("##MYNAME##", myName);

这似乎是我的电子邮件模板问题最简单的解决方案。