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;