告诉C#该变量具有接口的属性

Jim*_*988 1 c# types interface

我有以下界面:

public interface ISoftDeletable
{
    bool IsDeleted { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

而我的实体:

public class Field : ISoftDeletable
{
    [Key]
    public int FieldID { get; set; }

    public bool IsDeleted { get; set; }
...
Run Code Online (Sandbox Code Playgroud)

在我的通用存储库中,我有:

...
if( entity is ISoftDeletable )
{
    entity.IsDeleted = true; // does not know entity is implementing ISoftDeletable, so is throwing error that i cannot set IsDeleted
}
...
Run Code Online (Sandbox Code Playgroud)

但是当然,c#并不知道实体正在实现ISoftDeletable,因为实体是泛型类型.

我怎样才能让C#知道IsDeleted属性可以设置?

Eri*_*ips 6

根据您的代码,我会稍微将其更改为:

var softDelete = entity as ISoftDeletable;
if(softDelete != null)
{
  softDelete .IsDeleted = true; 
}
Run Code Online (Sandbox Code Playgroud)

这段代码对它实际做的事情(IMO)更具可读性.


Geo*_*ker 5

我不知道你的设置比你提供的更多; 但这对我来说很可疑.它可能不是,但我没有足够的图片知道.

为您解决紧迫的问题,你可以投出entityISoftDeletable,这样的ISDeleted属性可以设置为:

((ISoftDeletable)entity).IsDeleted = true;
Run Code Online (Sandbox Code Playgroud)

再次; 关于不得不这样做的事情; 但现在是晚上9点47分,所以今晚我不会花太多脑力来搞清楚这一点.