"If is class" 条件失败

"If is class" Condition Failing

嗨,我有 3 个基本接口:

public interface IKlarfDefect
{
    int TEST { get; set; }
    int DEFECTID { get; set; }

}

public interface IKlarfDefect <TImageListInfo> : IKlarfDefect
{

    List<TImageListInfo> KlarfImageList { get; set; }
}

public interface IHasKlarfImageList<TImageListInfo>
{
    List<TImageListInfo> KlarfImageList { get; }
}

这些 classes 实现它:

public class CIMKlarfDefect : IKlarfDefect, IHasKlarfImageList<CIMKlarfImageListInfo>
{
    public int TEST { get; set; }
    public int DEFECTID { get; set; }

    public List<CIMKlarfImageListInfo> KlarfImageList { get; set; } = new List<CIMKlarfImageListInfo>();
    
}

public class RMTKlarfDefect : IKlarfDefect, IHasKlarfImageList<CIMKlarfImageListInfo>
{
    public int TEST { get; set; }
    public int DEFECTID { get; set; }
    
    public List<RMTKlarfImageListInfo> KlarfImageList { get; set; } = new List<RMTKlarfImageListInfo>();
}

然后我在另一个 class 中有这个函数试图读取这些 classes:

internal static string CreateCIMDefectListString(IEnumerable<IKlarfDefect<IKlarfImageListInfo>> klarfDefectList)
{
    StringBuilder defectListString = new StringBuilder();
    defectListString.AppendLine("");
    foreach (var klarfDefect in klarfDefectList) { 
        defectListString.Append(klarfDefect.TEST).Append(" ");
        defectListString.Append(klarfDefect.DEFECTID).Append(" ");
        
        if (klarfDefect is IHasKlarfImageList<IKlarfImageListInfo> grcKlarfDefect) 
        {
            if (grcKlarfDefect.KlarfImageList.Count == 0)
            {
                defectListString.Append("N;");
                defectListString.AppendLine();
            }
            
        }
    }
    return defectListString.ToString();

}

它可以编译,但是当我传入 RMTKlarfDefect 或 CIMKlarfDefect 时 if 语句失败。可能有人知道这是为什么吗?

如果 klarfDefect 是 IHasKlarfImageList grcKlarfDefect 失败,因为它不是 return true 这将允许它处理图像列表

您的 if 声明说

if (klarfDefect is IHasKlarfImageList<IKlarfImageListInfo> grcKlarfDefect)

但是你的类工具

IHasKlarfImageList<CIMKlarfImageListInfo>

因此您需要相应地更新您的 if 声明:

 if (klarfDefect is IHasKlarfImageList<CIMKlarfImageListInfo> grcKlarfDefect)