C# - 泛型类列表

imb*_*b13 3 c#

我有以下课程:

public abstract class Section
{

}

public class Section<T> : Section where T : new()
{
    public string Type { get; set; }

    public bool IsFocused { get; set; }

    private T sectionData;

    public T SectionData 
    { 
        get => sectionData == null ? sectionData = new T() : sectionData; 
        set => sectionData = value; 
    }
}

public class SectionHeaderData
{
    public string Text { get; set; }

    public int Level { get; set; }
}

public class SectionParagraphData
{
    public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我创建部分并List<>像这样存储:

Section<SectionHeaderData> sectionHeader = new Section<SectionHeaderData>();
sectionHeader.SectionData.Text = "This is Header.";
sectionHeader.SectionData.Level = 3;

Section<SectionParagraphData> sectionParagraph1 = new Section<SectionParagraphData>();
sectionParagraph1.IsFocused = true;
sectionParagraph1.SectionData.Text = "This is Paragraph 1.";

Section<SectionParagraphData> sectionParagraph2 = new Section<SectionParagraphData>();
sectionParagraph2.SectionData.Text = "This is Paragraph 2.";

List<Section> sections = new List<Section>();
sections.Add(sectionHeader);
sections.Add(sectionParagraph1);
sections.Add(sectionParagraph2);
Run Code Online (Sandbox Code Playgroud)

我无法 LINQ 并通过IsFocused == true以下方式获取元素:

var focusedSection = sections.FirstOrDefault(x => x.IsFocused == true);
Run Code Online (Sandbox Code Playgroud)

是否可以像普通列表一样访问SectionHeaderData&SectionParagraphData成员List<SomeClass>

编辑1:

按照建议,这里有更多关于我需要的信息。

在程序的某个时刻,将调用一个函数,我需要在其中获取焦点部分并能够访问SectionHeaderDataOR 的更具体数据SectionParagraphData

例如,我需要读取/设置Text属性的值。

Mon*_*Zhu 6

您需要将属性放入抽象类中:

public abstract class Section
{
    public string Type { get; set; }

    public bool IsFocused { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

例如,我需要读取/设置 Text 属性的值。

我实际上想知道为什么您不将Text属性拉入基类并通过继承解决它(我将从 Jon Skeets 评论中窃取名称):

public class SectionData
{
    public string Text { get; set; }
}

public class SectionHeaderData : SectionData
{
    public int Level { get; set; }
}

public class SectionParagraphData: SectionData { }
Run Code Online (Sandbox Code Playgroud)

然后您可以像这样访问这些字段:

var textSection = sections.OfType<SectionData>().ToList();
textSection[0].Text = "this compiles";
Run Code Online (Sandbox Code Playgroud)