【发布时间】:2013-04-17 18:40:13
【问题描述】:
我有一个名为NIFERepository 的类。它包含一个SaveObject 方法,该方法不返回任何内容并对数据库执行操作。
public class NIFERepository<E>
{
protected void SaveObject(object saveObject)
{
if (saveObject is E)
this.RepositorySession.Merge(saveObject);
}
}
1 .我希望创建一个调用此SaveObject() 方法的公共扩展方法,如下所示:
public static class NIFERepositoryExtensions
{
public static T Save<T, E>(this T self, E saveObject) where T : NIFERepository<E>
{
self.SaveObject(saveObject);
return self;
}
}
但受保护的范围不允许我的扩展方法识别它。
有没有办法让这种形式的方法起作用?
2 。我用 2 种类型创建了我的扩展方法:T 和 E。 T 是调用它的实例,E 是我的ProductRepository<Product> 中定义的类型,例如。当我调用此方法时,未显示定义的类型。
我有办法让它工作吗?
【问题讨论】:
-
SaveObject()应该是通用的,或者至少应该在使用错误类型调用时抛出异常。 -
我没有在这里输入,但是当对象参数的类型错误时,我的 SaveObject() 会抛出异常。但我希望我的扩展方法美观,在它的调用中显示正确的类型。但它工作正常。谢谢!
-
不要编辑问题的答案。如果您对自己的问题有答案,请将答案发布为答案。
-
有什么原因你不能添加实现这个扩展方法作为类本身的实际公共成员?
标签: c# extension-methods