不能隐式转换类型System.数组转换为字符串

本文关键字:转换 数组 字符串 System 类型 不能 | 更新日期: 2023-09-27 18:10:06

我得到一个错误(不能隐式转换类型系统。数组到字符串),同时尝试遍历数组。我已经按照代码执行了,并且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]变成字符串,但是当这种情况发生时,它显示的是这个代码连接到它带来系统的单词模板的名称。字符串[],名字"chris"应该在哪里。我只是想知道如何解决转换类型系统的问题。数组转换为字符串。谢谢你提供的任何帮助

不能隐式转换类型System.数组转换为字符串

这是因为WordMergeFieldsDictionary<string, Array> WordMergeFields

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

你不是想把它声明为一个值类型为string的字典吗?

Dictionary<string, string> WordMergeFields

根据方法签名,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>,它应该工作,至少在我们这里看到的

如果你想显式地将Array转换为字符串,你应该这样编码。

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

替换为

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