C#FormatException,不涉及任何数字或空值解析

C#FormatException,不涉及任何数字或空值解析,c#,string-formatting,C#,String Formatting,此行正在引发FormatException: var dataString = string.Format("email_address:{0}, status:subscribed, merge_fields:{1}", "a", "b"); 毫无疑问,问题是显而易见的,但我没有看到 以下是函数: public static string AddSubscriber(string listId, Subscriber subscriber) { string

此行正在引发FormatException:

var dataString = string.Format("email_address:{0}, status:subscribed, merge_fields:{1}", "a", "b");
毫无疑问,问题是显而易见的,但我没有看到

以下是函数:

   public static string AddSubscriber(string listId, Subscriber subscriber) {

            string url = string.Format("https://us10.api.mailchimp.com/3.0/lists/{0}/members/", listId);

            var req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/json";
            req.Headers.Add("AUTHORIZATION", basicAuth);

            var mergeFieldJson = subscriber.MergeFields();
            var dataString = string.Format("email_address:{0}, status:subscribed, merge_fields:{1}", "a", "b"); // subscriber.email, mergeFieldJson);

            /*
            byte[] data = System.Text.Encoding.UTF8.GetBytes(dataString);
            using (var stream = req.GetRequestStream()) {
                stream.Write(data, 0, data.Length);
            }

            HttpWebResponse response = (HttpWebResponse)req.GetResponse();

            return new StreamReader(response.GetResponseStream()).ReadToEnd();
            */
            return "";
        }
   public string MergeFields() {
        return string.Format("{'Email':'{0}','First Name':'{1}','Last Name':'{2}','Mascot':'{3}','Store Link':'{4}','School':'{5}'}",
            email, firstname, lastname, mascot, storelink, school
        );
    }
例外情况如下:

Input string was not in a correct format. 
    at System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args)
    at System.String.Format(IFormatProvider provider, String format, Object[] args)
    at MailChimpLib.MailChimp.AddSubscriber(String listId, Subscriber subscriber) in d:\Development\GTPRepository\team24x7\trunk\MailChimpLib\MailChimp.cs:line 40
    at team24x7.Controllers.StoreController.AddTestSubscriber() in d:\Development\GTPRepository\team24x7\trunk\team24x7\api_source\Controllers\StoreController.cs:line 167
第40行是字符串为.Format(..)的行

以下是MergeFields函数:

   public static string AddSubscriber(string listId, Subscriber subscriber) {

            string url = string.Format("https://us10.api.mailchimp.com/3.0/lists/{0}/members/", listId);

            var req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/json";
            req.Headers.Add("AUTHORIZATION", basicAuth);

            var mergeFieldJson = subscriber.MergeFields();
            var dataString = string.Format("email_address:{0}, status:subscribed, merge_fields:{1}", "a", "b"); // subscriber.email, mergeFieldJson);

            /*
            byte[] data = System.Text.Encoding.UTF8.GetBytes(dataString);
            using (var stream = req.GetRequestStream()) {
                stream.Write(data, 0, data.Length);
            }

            HttpWebResponse response = (HttpWebResponse)req.GetResponse();

            return new StreamReader(response.GetResponseStream()).ReadToEnd();
            */
            return "";
        }
   public string MergeFields() {
        return string.Format("{'Email':'{0}','First Name':'{1}','Last Name':'{2}','Mascot':'{3}','Store Link':'{4}','School':'{5}'}",
            email, firstname, lastname, mascot, storelink, school
        );
    }
对我来说,它在调试模式下工作,但在发布模式下调用它之后的行中会导致异常


毫无疑问,这个问题与在格式字符串中包含开头和结尾大括号的愚蠢错误尝试有关。(愚蠢被诅咒。)

我用Ideone运行了你的代码,它运行得很好

似乎我们缺少了代码中没有提到的东西


你有什么例外?异常信息是什么?

经过几番评论,我们找到了问题的根源:

return string.Format("{'Email':'{0}','First Name':'{1}','Last Name':'{2}','Mascot':'{3}','Store Link':'{4}','School':'{5}'}",
    email, firstname, lastname, mascot, storelink, school
);
这里您得到了
FormatException
,因为您的字符串中有一个花括号
{
符号,它在格式化字符串时具有特殊意义。解决方法是使用双花括号
{{
}
对其进行转义,这样您的代码就变成:

return string.Format("{{'Email':'{0}','First Name':'{1}','Last Name':'{2}','Mascot':'{3}','Store Link':'{4}','School':'{5}'}}",
    email, firstname, lastname, mascot, storelink, school
);

代码对我来说运行正常。你确定这一行有异常吗?你可能错了,因为这会引发异常。我编辑了问题,并包含了函数和回溯。第40行是带有字符串.Format(..)的行.我会说我被伏都教诅咒了,但我可能只是被愚蠢诅咒了。仍然没有足够的代码。我想异常来自
subscriber.MergeFields()
你说得对,这就是问题所在。为什么回溯显示第40行?为什么它甚至没有提到前一行或MergeFields函数?我将该调用从该行移到前一行,专门为了能够判断问题是否在MergeFields()中.Argh.好的,谢谢。我担心情况可能是这样。回溯清楚地识别了那行代码,但肯定还有其他原因。是
“a”和
“b”是这行代码使用的值,还是[假定的]对象属性的值?如果是后者,可能它们没有初始化或不是字符串。我编辑了文章,展示了整个函数和异常。这太奇怪了。我会问“为什么我会发生这种事情?”,但通常当我问这个问题时,我最终意识到我犯了一些错误。@NikG:
String.Format
是一种智能方法。它可以处理空值。此外,如果不是String
String.Format
internalls调用
ToString()
在所有类型中都可用,因为它在
对象
类中可用。@NikhilAgrawal哦,我没有意识到。我清楚地记得收到消息说,如果存在类型不匹配,就无法编译,但现在我想起来,这可能是一个Resharper错误。