如何设置本地通用变量

时间:2015-07-09 03:40:01

标签: c# generics

我想按照课程BarService<T1> service;中所述设置本地变量Foo

代码如下:

class Foo
{
    // error i got here and want to use this instead of using dynamic
    BarService<T> service;

    //dynamic service
    internal void SetBarService<T>() where T : class, new()
    {
       service = new BarService<T>();

    }

    internal IEnumerable<T2> GetAll<T2>() where T2 :class
    {
        return service.GetAll<T2>();
    }
}

public class BarService<T> where T : class
{
    internal IEnumerable<T> GetAll<T>()
    {
        throw new NotImplementedException();
    }
}

有人可以为我清除错误吗?

1 个答案:

答案 0 :(得分:2)

如果你想使用开放泛型类型作为你的字段的类型,那么你必须使整个类通用,而不仅仅是方法:

class Foo<T> where T : class, new()
{
    BarService<T> service;

    internal void SetBarService()
    {
       service = new BarService<T>();

    }

    internal IEnumerable<T2> GetAll<T2>() where T2 :class
    {
        return service.GetAll<T2>();
    }
}

目前还不清楚GetAll<T2>()与其他代码之间的关系是什么,但幸运的是,上述方法可行。

当然,您是否可以将类Foo实际放入泛型类中取决于它在代码中的其他位置的使用方式。你的问题没有足够的背景知道是否会有其他问题。但以上是基本思路。