C#从列表转换<;列表<;int>&燃气轮机;到IList<;IList<;int>&燃气轮机;
我有这样一个C#函数-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;
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);
}
}