Трудно помочь вам, потому что неясно, чего вы пытаетесь достичь с помощью этого.
Но, возможно, Интерфейс - лучший способ go для вас.
public interface ITyp
{
string FieldID { get; set; }
List<ITyp> Children { get; set; }
}
public class TypA : ITyp
{
public string FieldID { get; set; }
public List<ITyp> Children { get; set; } = new List<ITyp>();
}
public class TypB : ITyp
{
public string FieldID { get; set; }
public List<ITyp> Children { get; set; } = new List<ITyp>();
}
Благодаря этому вы можете сопоставить TypA и TypB одному и тому же объекту ITyp.
ITyp ityp = new TypA();
ityp = new TypB();
Вы можете использовать интерфейс напрямую.
string ID = ityp.FieldID;
Или вы можете преобразовать его обратно в TypA или Тип B.
TypA typaChild;
if (ityp.Children[0].GetType() == typeof(TypA)) typaChild = (TypA)ityp.Children[0];