- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含此方法的通用存储库:
public void Delete<T>(T item) where T : EntityBase
我正在尝试为某些对象添加软删除行为; IE。删除时,它们不会从数据库中删除,而是将 bool Deleted
设置为 false
并且它们将停止显示在查询中,除非将特定参数设置为包含它们。通常,应用程序的行为就像它们不存在一样,但管理 View 除外,在这些 View 中,可以通过再次翻转该 bool 来恢复这些项目。我的问题是,在将对象传递给此方法时,它被作为 EntityBase
处理,它没有这种软删除行为,因为许多类不需要它。 SoftDeleteEntityBase
扩展了 EntityBase
类以添加软删除行为,但我找不到一种干净的方法来转换对象以便我可以获取 bool。我的第一个想法是:
public void Delete<T>(T item) where T : EntityBase
{
if (item is SoftDeleteEntityBase)
{
((SoftDeleteEntityBase)item).Deleted = true;
Update<T>(item);
}
else
{
db.Set<T>().Remove(item);
}
}
但这给了我错误 “无法将类型 T 转换为 SoftDeleteEntityBase”
。
我如何获得该 bool 值?
最佳答案
这个简短的解决方案怎么样,但考虑更改存储库的设计
SoftDeleteEntityBase itemAsSoft = item as SoftDeleteEntityBase;
if (itemAsSoft != null)
{
itemAsSoft.Deleted = true;
Update(itemAsSoft);
}
我不知道你的上下文,但是这个带有环绕泛型的解决方案怎么样
void Main()
{
Delete(new Base()); // called with base
Delete(new Derived()); //called with derived
}
public void Delete(Base item)
{
Console.WriteLine ("called with base");
//one logic
GenericDelete(item);
}
public void Delete(Derived item)
{
Console.WriteLine ("called with derived");
//another logic
GenericDelete(item);
}
public void GenericDelete<T>(T item)
{}
public class Base
{}
public class Derived : Base
{}
关于c# - 从一种通用方法传递对象,其中 T : MyClass to another where T : DerivedClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15688198/
我有很多类都继承自一个基类——实际上它只是一个允许序列化的接口(interface)包装器: public abstract class VoucherRuleBase : IRule{ pu
我是 C# 的新手,我正在开发一个 rpg 游戏引擎。 我有我的基类 Item,它是 Weapon 和 Armour 的父类,武器和盔甲类有额外的变量,用于统计、武器插槽、盔甲类型等。 我的 Play
在使用新语言进行个人项目时,我遇到了一个烦人的编译时错误,我的 constants.h(常量类)的静态成员找不到类名(Quark,它是派生的Particle 类,这两个在同一个文件“Particle.
我无法从 BaseClass 隐式转换到它的DerivedClass .我有以下代码: class BaseClass { } class DerivedClass : BaseClass {
我正在尝试使用工厂方法返回派生类,但返回类型是基类类型。根据我的理解,我认为继承可以让我这样做,显然我错了。 WeightExercise 和 CardioExercise 均派生自 Exercise
我刚刚了解到将泛型参数作为 out 的类型参数强制该泛型类型保持不变。这让我很惊讶。我以为out参数被视为与返回类型相同(即如果泛型参数是协变的,那么它可以用作 out 输出参数),因为它们都是方法的
我遇到段错误但不知道为什么。使用std::unique_ptr(&DerivedClassObj)有问题吗?谢谢。 这是代码 # test.cc #include #include #includ
我尝试了下面的代码,并得到了一个编译错误。 class A {}; class B : public A {}; void f(A*& p) {} int main() { B* pB;
我有这样的基类: public class Scene { public IList Models {get; set;} } public class SceneModel { } 和像这样
我如何传递一个列表,该列表是一个 DerivedObjects 列表,其中方法需要一个 BaseObjects 列表。我正在转换列表 .ToList()并且想知道是否有更好的方法。我的第二个问题是语法
给定以下类定义: public class BaseClass { public string SomeProp1 { get; set; } } public class DerivedCl
我正在尝试传递 DerivedClass 的列表到接受 BaseClass 列表的函数,但我收到错误: cannot convert from 'System.Collections.Generic.
虽然我们可以从基类/接口(interface)继承,为什么我们不能声明一个List<>使用相同的类/接口(interface)? interface A { } class B : A { } cla
从下面的代码 sizeof(Base) == 24 和 sizeof(Derived) == 24。 为什么它们的大小相等? 在 Base 类中我们有 3 个成员,在 Derived 类中我们有另一个
我有一个包含此方法的通用存储库: public void Delete(T item) where T : EntityBase 我正在尝试为某些对象添加软删除行为; IE。删除时,它们不会从数据库中
我需要摆脱这个警告。据我了解,这似乎是因为 DerivedClass 不被视为普通旧数据。我读了关于 POD 的 cppreference和 Standard Layout Type但我仍然不明白为什
我对这个错误有疑问,添加默认构造函数并不能修复它。没有默认构造函数编译会产生错误,使用默认构造函数编译会产生错误。我已经在网上搜索了几个小时,但一无所获。这是我的代码的一个简单示例(实际代码相当长):
我几乎可以肯定我想做的事情有一个合适的术语,但由于我不熟悉它,我将尝试明确地描述整个想法。所以我拥有的是一组类,它们都继承自一个基类。所有类几乎完全由不同的方法组成,这些方法仅在每个类中相关。然而,有
我理解派生类的List<>不能直接赋值给基类的List<>。但是它如何允许将派生类的相同 List<> 分配给 IEnumerable<> 类型的基类参数。 public class Base {}
我有一个构造函数试图初始化基类中的一个字段。编译器提示。该字段 protected ,因此派生类应该具有访问权限。 //The base class: class BaseClass { public
我是一名优秀的程序员,十分优秀!