实现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; ,因此我无法实现所有接口成员.. 如何修改代码以避免错误?非常感谢!
答案 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