在下面的代码中,如何更改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}");
}