Sha*_*shi 5 .net c# generics c#-4.0
我在 C# web api 函数中有一个情况,我需要从我的数据库中检索不同对象的列表,并且需要通过调用各种方法来实现一些逻辑。
我怎样才能通过为所有 3 个对象编写一个通用函数来更好地实现这一点
例子
锁定列表有两种情况
整个列表被锁定(如果整个列表被锁定,则不要继续并抛出异常)
只有一个实体被锁定(如果从列表中锁定,则过滤并删除该元素)
List<Object1> list1;
List<Object2> list2;
List<Object3> list3;
private FilterLockedEntities(List<Object1> list1){
if(list1[0].isListLocked) //whole list is locked
throw ValidationException("Message")
list1.RemoveAll(a => a.IsLocked); //filter locked entities
//some more logic common to all
}
private FilterLockedEntities(List<Object2> list2){
if(list2[0].isListLocked) //whole list is locked
throw ValidationException("Message")
list2.RemoveAll(a => a.IsLocked); //filter locked entities
//some more logic common to all
}
private FilterLockedEntities(List<Object3> list3){
if(list3[0].isListLocked) //whole list is locked
throw ValidationException("Message")
list3.RemoveAll(a => a.IsLocked); //filter locked entities
//some more logic common to all
}
Run Code Online (Sandbox Code Playgroud)我在三个函数中的每一个中都有相同的逻辑,但具有不同实体的列表。
有没有一种方法可以使用单一方法而不是三个不同的函数,因为冗余逻辑而难以维护。如果逻辑发生变化,则需要在所有三个地方进行更新。
创建一个新界面:
public interface ILockable
{
bool isListLocked();
}
Run Code Online (Sandbox Code Playgroud)
然后让您的对象在其类声明中继承该接口:
class Object1 : ILockable
{
public IsLocked()
{
// Your code here...
}
}
...
class Object2 : ILockable ...
class Object3 : ILockable ...
Run Code Online (Sandbox Code Playgroud)
然后让你的函数接受一个List对象ILockable:
private FilterLockedEntities(List<ILockable> list)
{
// Your code here...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
924 次 |
| 最近记录: |