using System.Collections.Generic;
public ClassA someProp { get; set; }
public ClassA someProp2 { get; set; }
public virtual Type Types => Type.None;
public class ClassB:ClassA
public override Type Types => Type.Default;
public string FieldName { get; set; }
public class ClassC:ClassA
public override Type Types => Type.Value;
public int FieldValue { get; set; }
public static void Main()
List<MainClass> entities = new()
new() { someProp = new ClassC() { FieldValue = 4 }, someProp2 = new ClassB() { FieldName = "Flower" } },
new() { someProp = new ClassA() { }, someProp2 = new ClassC() { FieldValue = 7 } }
IEnumerable<string> values = entities
.SelectMany(ent => new[] { ent.someProp, ent.someProp2 })
.Aggregate(new List<string>(),
fields.Add(((ClassB)property).FieldName);
else if (property is ClassC)
fields.Add(((ClassC)property).FieldValue.ToString());
Console.WriteLine(string.Join(Environment.NewLine, values));