C#泛型类实现错误

时间:2016-06-15 08:56:09

标签: c# generics

实现C#泛型类来重构类,我面对这样的问题: C#泛型类实现错误 错误CS0428无法转换方法组' InitConfig'非代表类型' T'。你打算调用这个方法吗?

错误CS1662无法将lambda表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型

public class RedisDatabaseService<T> : IRedisDatabase<T> where T : class,IConfig
{
        public Lazy<T> lazyConfig { get; } =  new Lazy<T>(()=>  InitConfig);
        public T InitConfig()
        {
            throw new NotImplementedException();
        }

}

 public interface IRedisDatabase<T> where T : class
    {
 T InitConfig();
}

我添加了brace()后,但仍有问题,

&#34;无法访问非静态方法...&#34; ,因此我无法实现所有接口成员.. 如何修改代码以避免错误?非常感谢!

3 个答案:

答案 0 :(得分:2)

您只需将代码更改为调用InitConfig,或将其用作操作即可。请注意,我更喜欢第二个,因为它很简洁。

或者:

new Lazy<T>(()=>  InitConfig());

new Lazy<T>(InitConfig);

这是我编译的代码。请注意,我在构造函数中执行赋值(因为我仍在使用Linqpad 4!) - 我认为这将解决您的错误。

public class RedisDatabaseService<T> : IRedisDatabase<T> where T : class, IConfig
{
    public RedisDatabaseService()
    {
        // Move your lazy assignment to the constructor, as so:
        lazyConfig =  new Lazy<T>(InitConfig);
    }

    public Lazy<T> lazyConfig { get; private set; } 
    public T InitConfig()
    {
        throw new NotImplementedException();
    }

}

public interface IRedisDatabase<T> where T : class
{
    T InitConfig();
}

答案 1 :(得分:0)

InitConfig()是一个功能。因此,您需要为parentheses ()函数添加InitConfig()

public Lazy<T> lazyConfig { get; } =  new Lazy<T>(()=>  InitConfig());

答案 2 :(得分:0)

尝试更改

new Lazy<T>(() => InitConfig());

bower link