从派生 class 获取 属性 的更好方法

Better way to get property from derived class

我有下一个class

public class MainClass
{
   public ClassA someProp { get; set; }
}

public class ClassA
{
   public virtual Type Types => Type.None;
}

public class ClassB:ClassA
{
   public override Type Types => Type.Default;
        
   public string FieldName { get; set; }
}

我想从 ClassB 获取 FieldName

var result = entities.Where(x => x.someProp != null).Select(x => x.someProp).ToList();

比我得到的

var fields = (from ClassB in result select t.FieldName).ToList();

ClassB

获取 FieldName 的更好方法是什么

我认为这不是最佳解决方案。也许我的问题有一些最佳实践?

你可以试试这个:

var fields = entities
    .Where(item => item.someProp is ClassB)
    .Select(item => item.someProp)
    .Cast<ClassB>()
    .Select(item => item.FieldName).ToList();

这是一个更短的方法,您可以尝试从 someProp 转换 ClassB:

var result = lst.Where(x => x.someProp != null).Select(x => (ClassB)x.someProp).Select(x => x.FieldName).ToList();

您必须过滤实体并仅获取 B 类实体,然后像往常一样阅读 属性。

var values = entities
      .Select(mainClass => mainClass.SomeProp)
      .OfType<ClassB>()
      .Select(classB => classB.FieldName)