【问题标题】:Cannot implicitly convert type 'char[]' to 'string[]' [closed]无法将类型“char[]”隐式转换为“string[]”[关闭]
【发布时间】:2015-08-07 17:26:24
【问题描述】:

strArr 是完整的字符串,我将其拆分以获得不同的标题 n 日期,但我希望它们在字符串数组中。我申请的那一刻。 ToArray() {in string[] titl = item.Title.ToArray();}

错误信息

{Cannot 将类型 'string' 隐式转换为 'string[]'} 更改为 {不能将类型'char[]'隐式转换为'string[]'}

。 Data 类中的所有内容也是字符串类型的

public class Data
{

    public string Date
    {
        get;
        set;
    }

    public string Title
    {
        get;
        set;
    }
}

string xml1 = Search();

string[] strArr = xml1.Split('|');

    int i,j;
Data item = new Data();

 for (i = 0; i < strArr.Count(); i = i + 2)

        {
            if (strArr[i].ToString() != "")
            {
                item.Title = strArr[i];
                string[] titl = item.Title.ToArray();
            }
        }
        for (j = 1; j < strArr.Count(); j = j + 2)
        {
            item.Date = strArr[j];
            string[] Dat = item.Date.ToArray();

        }

【问题讨论】:

  • 您没有向我们展示strArray 的声明,这无济于事。它是一个字符串,还是一个字符串数组?
  • @JonSkeet OP 说它的类型是 string
  • 如果您使用的是string,为什么要调用ToArray?您想处理单个字符吗?
  • 你为什么首先希望它是一个数组?
  • 所以首先这是一个令人困惑的名字。接下来,您如何期望strArray[i].ToString() 是一个空字符串?你期待strArray[i] 是什么?

标签: c# asp.net string char


【解决方案1】:

string.ToArray() 返回一个char 类型的数组。

由于您需要所有标题和日期,您应该有一个Data 类型的数组:

string xml1 = Search();
string[] strArr = xml1.Split('|');

int totalitems = strArr.Length / 2; //get Titles count
Data[] items = new Data[totalitems];    //initialize array of data

for (int i = 0; i < strArr.Length; i = i + 2)
{
    //new instance of Data
    if(items[i/2] == null)
        items[i/2] = new Data();

    if (strArr[i].ToString() != "") //get title
    {
        items[i/2].Title = strArr[i];
    }
    if (strArr[i + 1].ToString() != "") //get date
    {
        items[i/2].Date = strArr[i + 1];
    }
}

您不再需要 2 个 for 循环。

【讨论】:

  • Data.length 不起作用。数据是一个包含标题和日期的类
  • 抱歉,输入错误。是items.Length
  • 我稍后在我的代码中需要这个 title 变量,如果我像 var titl=items[i].Title 那样做,那么它再次将 char[] 的相同错误传递给 string[] :(
  • @Shaharyar 如果你循环 i 检查 items.Length 而不是 strArr.Length 你将只读取项目的前半部分
  • @BlasSoriano 不,我正在使用for 循环体中的strArr 访问ii + 1。我将遍历完整的数组
【解决方案2】:

在字符串上调用.ToArray() 返回char[],而不是string[]。这两种类型之间没有隐式转换。

要完成这项工作,试试这个:

string[] titl =
        item.Title.ToCharArray().Select(c => c.ToString()).ToArray();

根据您在下面的评论,试试这个:

var xml1 = "X|A|Y|B|Z|C|W|D";
var strArr = xml1.Split('|');

var items =
    strArr.Where((x, n) => n % 2 == 0)
        .Zip(
            strArr.Where((x, n) => n % 2 == 1),
            (t, d) => new Data()
            {
                Title = t,
                Date = d
            })
        .ToArray();

我得到这个结果:

【讨论】:

  • 我不认为 OP 实际上希望每个字符都是字符串。
  • @YuvalItzchakov - 我认为这就是他想要的。或者你是说你认为他只想要一个字符串数组?
  • 我认为 OP 实际上有某种分隔字符串需要拆分。
  • @Nancy - 它没有返回char。我已经测试过这段代码。它会这样做:"ABC" => { "A", "B", "C" } - 不是{ 'A', 'B', 'C' }
  • @Enigmativity 谢谢,然后我会尝试其他方法:)
【解决方案3】:

字符串上的 ToArray 方法为您提供字符数组。您可以使用 linQ Select 方法将字符选择为字符串。

string[] titl = item.Title.Select(c=>c.ToString()).ToArray();

您可能需要重新考虑,如果您想要字符串数组或字符数组,就像您想要字符数组一样,那么您需要将标题数组的声明从string 更改为char

 char[] titl = item.Title.ToArray();

【讨论】:

  • 这不行我已经试过了
  • 你能解释一下什么不起作用,因为我在回答中的第二个语句得到了 char 数组
  • string[] 标题 = item.Title.Select(c=>c.ToString()).ToArray();正在返回 char 数组,但我需要字符串数组
  • 它返回的是字符串数组,否则它不会被编译你可以通过titl.GetType()检查它是否是字符串数组
猜你喜欢
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 2020-06-16
  • 2020-04-23
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多