2017-03-22 1 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은 중괄호 ({})를 사용하여 자리 표시자를 나타냅니다. 형식 문자열에 중괄호가 몇 개 포함되어있어 유효하지 않습니다.

Teststring { 42 } 

그래서 예를 들어 당신의 라인

"WHERE { " + 

을해야한다 : R의

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

결과 :

당신은 그들을 두 배로하여 이러한 중괄호를 탈출해야합니다당신은 자리 표시 이외의 당신의 형식 문자열에 중괄호를 사용할 수 없습니다

"WHERE {{ " + 
+0

감사합니다. –

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; 
관련 문제