C# 无法将类型Void隐式转换为类型System.Collections.Generic.IList<;T>;
试图返回泛型类型,但得到标题中描述的错误。 我确信我在做一些愚蠢的事情-谢谢你的建议C# 无法将类型Void隐式转换为类型System.Collections.Generic.IList<;T>;,c#,generics,C#,Generics,试图返回泛型类型,但得到标题中描述的错误。 我确信我在做一些愚蠢的事情-谢谢你的建议 public static IList<T> GetGroupById<T>(int groupId) { DashboardGroupType type = (DashboardGroupType)groupId; IList<T> result = null; var obj =
public static IList<T> GetGroupById<T>(int groupId)
{
DashboardGroupType type = (DashboardGroupType)groupId;
IList<T> result = null;
var obj = default(T);
switch (type)
{
case DashboardGroupType.Countries:
break;
case DashboardGroupType.Customers:
// this returns a list of typ IEnumerable<Customer>
obj = (T) CustomerRepository.GetAllCustomers();
break;
case DashboardGroupType.Facilities:
// this returns a list of typ IEnumerable<Facility>
obj = (T) FacilityRepository.GetAllFacilities();
break;
case DashboardGroupType.Heiarchy:
break;
case DashboardGroupType.Lines:
break;
case DashboardGroupType.Regions:
// this returns a list of typ IEnumerable<string>
obj = (T) CustomerRepository.GetRegionsHavingCustomers();
break;
case DashboardGroupType.States:
// // this returns a list of typ IEnumerable<Customer>
obj = (T) CustomerRepository.GetStatesHavingCustomers();
break;
case DashboardGroupType.Tanks:
break;
default:
break;
}
result = result.Add(obj); // ERROR IS THROWN HERE
}
public静态IList GetGroupById(int-groupId)
{
DashboardGroupType=(DashboardGroupType)groupId;
IList result=null;
var obj=默认值(T);
开关(类型)
{
案例仪表板组类型。国家/地区:
打破
案例仪表板GroupType。客户:
//这将返回类型IEnumerable的列表
obj=(T)CustomerRepository.GetAllCustomers();
打破
案例仪表板组类型。设施:
//这将返回类型IEnumerable的列表
obj=(T)FacilityRepository.GetAllFacilities();
打破
案例仪表板GroupType.Heiarchy:
打破
案例仪表板组类型。行:
打破
案例仪表板GroupType。区域:
//这将返回类型IEnumerable的列表
obj=(T)CustomerRepository.GetRegionsHavingCustomers();
打破
案例仪表板GroupType。状态:
////返回类型IEnumerable的列表
obj=(T)CustomerRepository.getStateSumingCustomers();
打破
箱体仪表板总成类型。油箱:
打破
违约:
打破
}
result=result.Add(obj);//此处抛出错误
}
您的方法说它将返回IList,但您没有返回任何内容(因此,返回void)。如果我没弄错的话,你们应该返回结果
编辑:
实际上,在进一步检查后,我意识到问题在于result.Add
返回void,并且
result=result.Add(obj)代码>正试图将其分配给结果(即列表
)。这就是此行出错的原因,但在添加任何内容之前,您还需要返回结果并实例化它
result = result.Add(obj);
Add()不返回任何内容。
删除“result=“两件事:您应该在末尾返回结果,在开始声明结果时,您应该将其声明为新列表,而不是空值。为什么要分配结果
result=result.Add(obj)代码>
如果您使用
result.Add(obj);
最后一行是返回结果代码>该方法不返回任何内容。它只是改变了列表。这就是为什么你会出错。只需删除任务:
result.Add(obj);
另一个问题是您没有初始化结果。运行代码时,您将得到一个NullReferenceException。你需要这样的东西:
IList<T> result = new List<T>();
根据您的评论,方法CustomerRepository.GetAllCustomers()代码>和设施存储库.GetAllFacilities()
等返回IEnumerable
或IEnumerable
或类似的实例。你要把这些铸成T。这意味着所有这些类型都必须可以铸成T
我猜你想要的是将这些收藏中的所有物品都添加到列表中。如果是这种情况,则应转换为IEnumerable
,并调用该方法
总的来说,这似乎是一个非常糟糕的设计。根据您试图实现的目标,使用继承和/或接口可能获得更好的设计。您缺少return语句
return result;
有效点,但不是错误的实际原因+1是一个很好的观点(欢迎使用SO)。是的,但是您仍然应该添加返回结果代码>在结尾…然后初始化结果
某个地方。@Martinho Fernandes:哇,那是我一个尴尬的评论。你是完全正确的,我完全没有正确地考虑它。我很想删除评论,但我想我会把它留在那里,这样你的评论仍然有意义,提醒我要注意和思考。开关盒的使用不好,因为不做任何事情的情况不需要使用…它不完整-我需要为其中一些添加响应模式。。。我现在只想把不完整的部分打破。@Code Sherpa:如果没有更多的细节(比如什么是仪表板组,以及如何、在哪里和为什么调用GetGroupById),很难说得更多。也许你可以发布另一个问题,更好地详细说明你的目标。谢谢Martinho,我现在就这么做。。。谢谢你的帮助。嗨,Martinho,我已经发布了我在这里工作的背景:谢谢你的反馈。
return result;