无法将System.Array类型隐式转换为字符串

时间:2014-06-23 12:05:51

标签: c# .net vsto

我在尝试循环遍历数组时收到错误(无法将类型System.Array隐式转换为字符串)。我已经遵循了代码并且for循环带回了正确的值。

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;
                            }
                        }
                    }
                }
            }
        }
    }

例外情况发生在

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

我试图将WordMergeFields [fieldname]转换为字符串,但是当发生这种情况时,它会显示带有此代码连接到它的单词template的名称,调出System.String [],其中名称“chris”应为。我只是想知道如何解决转换类型system.array到字符串的问题。感谢您提供的任何帮助

3 个答案:

答案 0 :(得分:6)

这是因为WordMergeFieldsDictionary<string, Array> WordMergeFields

WordMergeFields[fieldname]将返回一个数组。

您是不是要将其声明为值类型为string的字典?

Dictionary<string, string> WordMergeFields

答案 1 :(得分:1)

根据方法签名,WordMergeFields的类型为Dictionary<string, Array>。所以这个:

WordMergeFields[fieldname]

的类型为Array。您正在尝试将Array设置为string

value = WordMergeFields[fieldname]

因此错误。也许你想要WordMergeFields的第一个元素?也许WordMergeFields应该是字符串而不是数组的字典?很难理解这段代码的作用,所以我无法确定。

我猜测后者,根据你在哪里展示用法的评论:

WordMergeFields.Add("Name", name);

假设单词name的上下文中的值为string,那么您可能认为WordMergeFields为:

Dictionary<string, string>

请注意,string 可以隐式转换为Array,因为它是一个字符数组。因此,您的使用在一个方向上工作(将字符串设置为数组)但在另一个方向上不工作(将数组设置为字符串),主要是巧合而不是您自己的设计。

将类型更改为Dictionary<string, string>,它应该有效,至少在我们看到的内容中是这样。

答案 2 :(得分:0)

如果要将Array显式转换为字符串,则应对此进行编码。

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

替换为

if(WordMergeFields.ContainsKey(fieldname) )
   value =  WordMergeFields[fieldname].FirstOrDefault();