如果是引用类型,如何将Generic Type作为out类型?

时间:2013-09-09 11:11:59

标签: c# generics

我有一个名为

的方法
T GetService<T>(int serviceId);

我想知道是否有任何方法可以在不指定类型参数的情况下调用此方法

我试过

T GetService<T>(int serviceId) where T: new();

T GetService<T>(int serviceId) where T: class, new();

T GetService<T>(int serviceId) where T: MyClassName

但所有方法都失败了,

任何人都可以帮我解决这个问题,

你们中很少有人也会怀疑我为什么需要这个,

我的实际问题是我有一个方法

IEnumerable<IGrouping<string, MyClassName>> GroupItems(string ItemName)
{
    using(var db = new dbEntities())
    {
       return db.Catagories.Include("Proucts").where(c => c.name == ItemName).ToList().GroupBy(I => I.productId);
    }
 }

提供代码分析警告,说“不要在成员签名中嵌套泛型类型”,而我希望在不改变调用者方面的任何内容的情况下解决该问题这就是为什么我认为这个方法是通用的,我上面写的问题提出来了。

2 个答案:

答案 0 :(得分:0)

如果在使用IEnumerable<IGrouping<string, MyClass>>声明的泛型类中返回类型为<T>时出错,那么我猜你的返回类型实际 be IEnumerable<IGrouping<string, T>> ...当然,如果没有看到你的代码,这只能是猜测。

答案 1 :(得分:0)

看来你有不止一个问题,但我会回复你的第一个问题:

  

我想知道有什么方法可以用来调用这个方法   没有指定类型参数

简短回答:使用您的方法签名,您不能

说明:您似乎想要的是类型推断。因此,我认为你希望能够写下:

MyServiceType s = GetService(serviceId); 

而不是:

MyServiceType s = GetService<MyServiceType>(int serviceId).

类型推断从右到左工作(这里简化很多)。编译器不会根据分配结果的变量的tipe来推断T.方法推理只有在T是方法参数的一部分时才有效,而不是你的情况(你只有一个int)。