C#System.FormatException:输入字符串的格式不正确

时间:2017-03-22 17:41:34

标签: c# asp.net string.format

我试图使用String.Format创建一个字符串并添加参数。但出于某种原因,我收到了错误 -

  

System.FormatException:输入字符串的格式不正确。

这是我的代码

string queryPattern =
"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> " +
"PREFIX db: <http://dbpedia.org/ontology/> " +
"PREFIX prop: < http://dbpedia.org/property/> " +
"SELECT ?movieLink ?title ?genreLink ?genre ?releaseDate " +
"WHERE { " +
    "?movieLink rdf:type db:Film; " +
                "foaf:name ?title. " +
    "OPTIONAL { ?movieLink prop:genre ?genreLink. " +
                "?genreLink rdfs:label ?genre. " +
                "FILTER(lang(?genre) = 'en') }. " +
    "OPTIONAL{ ?movieLink <http://dbpedia.org/ontology/releaseDate> ?releaseDate }. " +

    "{0}" +
    "{1}" +
    "FILTER(lang(?title) = 'en') " +
"}" +
"ORDER BY DESC(?releaseDate)" +
"{2}";

return String.Format(queryPattern, genreMatch, dateMatch, limit);

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

string.Format使用大括号({})来表示占位符。您的格式字符串无效,因为它包含另外几个大括号。

你需要通过加倍来逃避这些大括号:

string s = "Teststring {{ {0} }}";
string r = string.Format(s, 42);

导致r:

Teststring { 42 }

例如你的行

"WHERE { " +

应该是

"WHERE {{ " +

答案 1 :(得分:2)

除了占位符之外,不允许在格式字符串中使用花括号,因此&#34; {0}&#34;没关系,&#34; {some text}&#34;不是。 您可以使用双花括号来解决您的问题:&#34; {{some text}}&#34;

答案 2 :(得分:0)

不确定如何将值传递给参数。您可以直接在字符串中使用参数,而不是使用字符串格式函数。

string queryPattern =
"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> " +
"PREFIX db: <http://dbpedia.org/ontology/> " +
"PREFIX prop: < http://dbpedia.org/property/> " +
"SELECT ?movieLink ?title ?genreLink ?genre ?releaseDate " +
"WHERE { " +
"?movieLink rdf:type db:Film; " +
            "foaf:name ?title. " +
"OPTIONAL { ?movieLink prop:genre ?genreLink. " +
            "?genreLink rdfs:label ?genre. " +
            "FILTER(lang(?genre) = 'en') }. " +
"OPTIONAL{ ?movieLink <http://dbpedia.org/ontology/releaseDate> ?releaseDate              }. " +

genreMatch +
dateMatch +
"FILTER(lang(?title) = 'en') " +
"}" +
"ORDER BY DESC(?releaseDate)" +
limit;

return queryPattern;