具有的检查类型适用于多个泛型类型



在下面的代码中,如何更改if语句以允许IDomainEntity<string>在块内?我尝试了一些方法(IDomainEntity<object>,或在if语句中添加||(,但每种方法都会给我带来不同的编译时错误,或者只是没有进入if语句。

foreach (var changedEntity in ChangeTracker.Entries())
{
if (changedEntity.Entity is IDomainEntity<int> entity)
{
switch (changedEntity.State)
{
case EntityState.Added:
entity.CreatedBy = user;
entity.UpdatedBy = user;
break;
case EntityState.Modified:
Entry(entity).Reference(x => x.CreatedBy).IsModified = false;
entity.UpdatedBy = user;
break;
}
}
}

您可以为所有子域接口定义一个基本IDomain

public interface IDomain
{
bool SpecificFlag { get;  }
}
public interface ISubDomain<T> : IDomain
{
}     
public class Entity1 : ISubDomain<int>
{
public bool SpecificFlag => true;
}
public class Entity2 : ISubDomain<string>
{
public bool SpecificFlag => false;
}

你可以像这个一样检查数值

var entities = new List<IDomain>();
entities.Add(new Entity1());
entities.Add(new Entity2()); 
foreach (var item in entities)
{
if(item is IDomain)
Console.WriteLine($"Item Falg Value : {item.SpecificFlag}");
}

最新更新