"If is class"条件失败

  • 本文关键字:失败 条件 is If class c#
  • 更新时间 :
  • 英文 :


嗨,我有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; }
}

这些类实现它:

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>();
}

然后我在另一个类中有这个函数,它尝试遍历这些类:

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失败,因为它没有返回true这将允许它处理imagelist

您的if语句说

if (klarfDefect is IHasKlarfImageList<IKlarfImageListInfo> grcKlarfDefect)

但是你的类实现

IHasKlarfImageList<CIMKlarfImageListInfo>

因此您需要相应地更新您的if语句:

if (klarfDefect is IHasKlarfImageList<CIMKlarfImageListInfo> grcKlarfDefect)

最新更新