2014-06-23 2 views
-3

배열을 반복하는 동안 오류가 발생합니다 (암시 적으로 System.Array 형식을 문자열로 변환 할 수 없음). 나는 코드를 따라 갔고 for 루프는 올바른 값을 가져왔다.System.Array 형식을 암시 적으로 문자열로 변환 할 수 없습니다.

value = WordMergeFields.ContainsKey(fieldname) ? WordMergeFields[fieldname] : null; 

에서 일어나는

public static string[] name = new string[] { "Chris" }; 
     public static void FindMergeFielsa(WordprocessingDocument WPDoc, Dictionary<string, Array> WordMergeFields) 
    { 
     foreach (var field in WPDoc.MainDocumentPart.Document.Body.Descendants<SimpleField>()) 
     { 
      string[] instruction = field.Instruction.Value.Split(splitChar, StringSplitOptions.RemoveEmptyEntries); 

      if (instruction[0].ToLower().Equals("mergefield")) 
      { 
       string fieldname = instruction[1]; 

       foreach (var fieldtext in field.Descendants<Text>()) 
       { 

        if (fieldtext.InnerText =="«_skils»") 
        { 
         //TODO 
        } 
        else 
        { 
         for (int i = 0; i < name.Length; i++) 
         { 
          string value = name[i]; 

          //ERORR HERE Keeps Changing Value of Name "Chris" to system.string[] when put .ToString() 
          value = WordMergeFields.ContainsKey(fieldname) ? WordMergeFields[fieldname] : null; 

          if (value != null) 
          { 
           fieldtext.Text = value; 
          } 
         } 
        } 
       } 
      } 
     } 
    } 

exceptionis 나는 문자열로 WordMergeFields [필드 이름]을 설정하는 시도했지만 이런 때이 코드가 연결되어있는 단어 템플릿의 이름을 표시한다 이름이 "chris"인 System.String []을 불러옵니다. 난 그냥 어떻게 system.array 형식의 문자열을 커버하는 문제를 해결할 수 있습니다 궁금 해서요. 줄 수있는 도움을 주셔서 감사합니다

+0

WordMergeFields로 교체하십시오.추가 ("이름", 이름); 이것은 템플릿의 배열 필드와 병합 필드를 찾을 문자열의 색인을 가진 사전입니다. – willa

+0

원래 게시물을 편집 할 수 있습니다 ... –

답변

6

그 이유는 WordMergeFieldsDictionary<string, Array> WordMergeFields이기 때문입니다.

WordMergeFields[fieldname]은 배열을 반환합니다.

값 유형이 string 인 사전으로 선언 하시겠습니까?

Dictionary<string, string> WordMergeFields 
1

은 메소드 서명에 따르면, WordMergeFieldsDictionary<string, Array> 유형이다. 이렇게 :

WordMergeFields[fieldname] 

Array입니다.

value = WordMergeFields[fieldname] 

따라서 오류 : 당신은 Arraystring A와 설정하려고하고 있습니다. 어쩌면 WordMergeFields의 첫 번째 요소를 원하겠습니까? 아마 WordMergeFields 배열 대신 문자열의 사전 있어야합니까? 이 코드가하는 일을 따라하기가 어렵 기 때문에 확신 할 수 없습니다.

나는 당신의 의견에 사용 현황 보여 곳을 기반으로, 후자를 추측하고있어 :

WordMergeFields.Add("Name", name); 

이 그때는 아마로 WordMergeFields에 대한 의미, 값이 string입니다 단어 name의 문맥에 의해 가정 :

Dictionary<string, string> 

가 charac의 배열입니다 때문에 string 암시 적으로 Array로 변환 할 수 있습니다 ters. 따라서 사용법은 한 방향으로 (문자열을 배열로 설정) 작동하지만 다른 배열 (문자열을 배열로 설정)에서는 작동하지 않습니다. 주로 자신의 디자인보다는 우연히 작동합니다.

유형을 Dictionary<string, string>으로 변경하십시오. 여기에 표시된 내용을 고려할 때 작동해야합니다.

0

Array를 명시 적으로 문자열로 변환하려면이 코드를 작성해야합니다.

value = WordMergeFields.ContainsKey(fieldname) ? WordMergeFields[fieldname] : null; 

if(WordMergeFields.ContainsKey(fieldname)) 
    value = WordMergeFields[fieldname].FirstOrDefault(); 
관련 문제