2017-03-22 33 views
2

String.Formatを使用して文字列を作成し、パラメータを追加しようとしています。しかし何らかの理由で、私はエラーを受け取ります -C#System.FormatException:入力文字列の形式が正しくありません

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

string.Formatは、中括弧({})を使用してプレースホルダを示します。書式文字列には、中括弧がいくつか含まれているため、無効です。

あなたがそれらを2倍にすることにより、これらの中括弧をエスケープする必要があります。rで

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

結果:

Teststring { 42 } 

だから例えば、あなたのライン

"WHERE { " + 

する必要があります
"WHERE {{ " + 
+0

lolありがとうございます –

2

あなたが、プレースホルダ以外のあなたのフォーマット文字列で中括弧を使用することはできませんので、「{0}」OKで、「{some text}は」ではありません。 二重中括弧を使用して問題を解決できます。 "{{some text}}"

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; 
関連する問題