我有一个方法:
public void StoreUsingKey<T>(T value) where T : class, new() {
var idModel = value as IIDModel;
if (idModel != null)
Store<T>(idModel);
AddToCacheUsingKey(value);
}
我希望根据value
参数的IIDModel
实现调用以下方法。
public void Store<T>(T value) where T : class, IIDModel, new() {
AddModelToCache(value);
}
有没有办法告诉Store<T>
来自value
的{{1}}参数是否实现StoreUsingKey<T>
?或者我是以错误的方式解决这个问题?
富
答案
从每个方法中删除IIDModel
约束允许代码工作。问题在于我试图将接口作为可以实例化的对象传递出来。
答案 0 :(得分:5)
你已经是。通过将IIDModel约束放在Store&lt; T&gt;上。您保证,value参数实现IIDModel。
哦,好的,我现在看到你在说什么。怎么样:
public void StoreUsingKey<T>(T value) where T : class, new() {
if (idModel is IIDModel)
Store<T>((IIDModel)idModel);
AddToCacheUsingKey(value);
}
再次编辑: Tinister是对的。这本身不会起作用。但是,如果您的Store方法看起来像Joel Coehoorn posted,那么它应该可以工作。
答案 1 :(得分:2)
public void Store(IIDModel value) {
AddModelToCache(value);
}
答案 2 :(得分:1)
从每个方法中删除new()
约束允许代码工作。问题在于我试图将接口作为可以实例化的对象传递出来。