1

我有一种方法叫做

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);
    }
 }

它给出了代码分析警告说“不要在成员签名中嵌套泛型类型”,我想在不改变调用方任何事情的情况下解决这个问题这就是为什么我想将这种方法作为通用方法,并且我在上面写的问题提出了。

4

2 回答 2

0

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

于 2013-09-09T11:21:06.957 回答
0

看来您有不止一个问题,但我将回答您的第一个问题:

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

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

解释:您似乎想要的是类型推断。有了这个,我想你希望能够写:

MyServiceType s = GetService(serviceId); 

代替:

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

类型推断从右到左有效(在这里简化了很多)。编译器不会根据分配给结果的变量的类型来推断 T。仅当 T 是方法参数的一部分并且不是您的情况(您只有一个 int)时,方法的推断才有效。

于 2013-09-09T13:04:50.267 回答