Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从列表转换<;列表<;int>&燃气轮机;到IList<;IList<;int>&燃气轮机;_C#_Asp.net_Asp.net Mvc_Asp.net Core_Generics - Fatal编程技术网

C#从列表转换<;列表<;int>&燃气轮机;到IList<;IList<;int>&燃气轮机;

C#从列表转换<;列表<;int>&燃气轮机;到IList<;IList<;int>&燃气轮机;,c#,asp.net,asp.net-mvc,asp.net-core,generics,C#,Asp.net,Asp.net Mvc,Asp.net Core,Generics,我有这样一个C#函数- public IList<IList<int>> Subsets(int[] nums) { List<List<int>> output = new List<List<int>>(); if (nums.Length == 0) { return output; //Problem in this line //return null;

我有这样一个C#函数-

public IList<IList<int>> Subsets(int[] nums)
{
    List<List<int>> output = new List<List<int>>();
    if (nums.Length == 0)
    {
        return output;    //Problem in this line
        //return null;
    }
    ........
    ........
    return output.Concat(Subsets(nums.Skip(1).ToArray())).ToList();
}
公共IList子集(int[]nums)
{
列表输出=新列表();
如果(nums.Length==0)
{
返回输出;//此行有问题
//返回null;
}
........
........
返回output.Concat(子集(nums.Skip(1.ToArray())).ToList();
}
我发现的是-

Severity    Code    Description Project File    Line    Suppression State

Error   CS0266
Cannot implicitly convert type 'System.Collections.Generic.List<System.Collections.Generic.List<int>>' to 'System.Collections.Generic.IList<System.Collections.Generic.IList<int>>'.

An explicit conversion exists (are you missing a cast?) LeetCode    D:\LeetCode\Solution.cs 13  Active
严重性代码描述项目文件行抑制状态
错误CS0266
无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.IList”。
存在显式转换(是否缺少转换?)LeetCode D:\LeetCode\Solution.cs 13处于活动状态

有人能帮忙吗?

试试这个:

IList<IList<int>> list2 = list.Cast<IList<int>>().ToList();
IList list2=list.Cast().ToList();
您必须使用System.Linq添加

更改

List<List<int>> output = new List<List<int>>();
列表输出=新列表();

列表输出=新列表();
您可以将外部列表强制转换为IList,因为list实现了IList,但是您不能强制转换list的类型参数,因此它应该从一开始就声明为IList

感谢您的精彩评论

我变了

return new List<List<int>>();
返回新列表();

返回新列表();

这对我来说非常有用。

不过,我同意创建适当界面的其他答案,您可以做到这一点,而无需像古尔·加勒(Gur Galler)建议的那样创建一个新列表,只需进行一点硬核黑客攻击:

[StructLayout(LayoutKind.Explicit)]
public struct Union
{
    [FieldOffset(0)]
    public List<List<int>> a;
    [FieldOffset(0)]
    public IList<IList<int>> b;

    public static IList<IList<int>> Cast(List<List<int>> list)
    {
        var u = new Union();
        u.a = list;
        return u.b;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var lists = new List<List<int>>() { new List<int>() { 1, 2, 3 } };
        IList<IList<int>> casted = Union.Cast(lists);
    }
}
[StructLayout(LayoutKind.Explicit)]
公共结构联合
{
[字段偏移量(0)]
公开名单a;
[字段偏移量(0)]
公共图书馆b;
公共静态IList强制转换(列表)
{
var u=新的联合();
u、 a=列表;
返回英国;
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var lists=new List(){new List(){1,2,3}};
IList casted=Union.Cast(列表);
}
}

如果将初始化更改为
新列表()
,该怎么办?
return new List<IList<int>>();
[StructLayout(LayoutKind.Explicit)]
public struct Union
{
    [FieldOffset(0)]
    public List<List<int>> a;
    [FieldOffset(0)]
    public IList<IList<int>> b;

    public static IList<IList<int>> Cast(List<List<int>> list)
    {
        var u = new Union();
        u.a = list;
        return u.b;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var lists = new List<List<int>>() { new List<int>() { 1, 2, 3 } };
        IList<IList<int>> casted = Union.Cast(lists);
    }
}