无法将类型'string'隐式转换为'System.Collections.Generic.List <int>'

时间:2019-08-23 11:41:12

标签: c#

这应该比较每个列表上的三个数字,如果A中的数字大于B中的数字,则指向C;如果B中的数字大于A中的数字,则指向D。如果它们相等,则不执行任何操作。这是一个示例:

Input     | output
A= 1 3 2  |  C D
B= 3 2 2  |  1 1

代码如下:

static List<int> compareTriplets(List<int> a, List<int> b)
{
    int c = 0;
    int d = 0;
    for (int i = 0; i < 3; i++)
    {
        if (a[i] > b[i])
        {
            c++;
        }
        else if (b[i] > a[i])
        {
            d++;
        }
    }
    return c + " " + d;
}

这段代码向我返回:

  

错误CS0029:无法将类型'string'隐式转换为'System.Collections.Generic.List '

5 个答案:

答案 0 :(得分:4)

对我来说,这段代码看起来像您要返回2个数字:

return c + " " + d;

但是,这样它将变成一个字符串,该字符串的值与方法签名不匹配。

要返回数字列表(例如2个数字),您可以使用

return new List<int>{c, d};

答案 1 :(得分:2)

您正在尝试将字符串转换为List。函数compareTriplets必须返回一个字符串。

建议:使用索引进行迭代时,您需要检查列表的边界。

static string compareTriplets(List<int> a, List<int> b)
{
    int c = 0;
    int d = 0;
    for (int i = 0; i < 3; i++)
    {
        if (a[i] > b[i])
            c++;
        else if (b[i] > a[i])
            d++;
    }
    return c + " " + d;
}

使用C#6.0+,您可以像这样返回:

return $"{c} {d}";

答案 2 :(得分:0)

您正在指定函数将返回整数列表:static List<int>。您需要将其更改为字符串。

static String compareTriplets(List<int> a, List<int> b) {
    int c = 0;
    int d = 0;
    for (int i=0;i<3;i++){
        if (a[i]>b[i]){
           c++;
        }
        else if (b[i]>a[i])
        {
            d++;
        }
    }
    return c.ToString() + " " + d.ToString();
 }

编辑:不需要显式ToString()强制转换。

如果您确实要返回List<int>,请执行以下操作:

static List<int> compareTriplets(List<int> a, List<int> b) {
    int c = 0;
    int d = 0;
    for (int i=0;i<3;i++){
        if (a[i]>b[i]){
           c++;
        }
        else if (b[i]>a[i])
        {
            d++;
        }
    }
    return new List<int>(){ c, d };
 }

答案 3 :(得分:0)

您的返回类型为stringa + " " + b,因此您需要更改方法签名:

static string compareTriplets(List<int> a, List<int> b) {
    // etc....

答案 4 :(得分:0)

您应该返回类型List<int>,但您正在返回c +" "+ d。我不明白其余的问题。

您应该返回一个列表。这是一个示例:

static List<int> compareTriplets(List<int> a, List<int> b) 
{
    int c = 0;
    int d = 0;

    for (int i=0;i<3;i++)
        if (a[i]>b[i])
            c++;
        else if (b[i]>a[i])
            d++;

    return new List<int>{ c, d };
 }