簡體   English   中英

C#從父集合的項目獲取子屬性

[英]C# Get child property from the item of Parent Collection

我正在使用ASP.NET MVC。 我有一個父母:

public class ReportFilterBuilderStruct
{
    public string PropName { get; set; }
    public string ClassName { get; set; }
    public string SubListName { get; set; }
    //public virtual string SecondaryPropName { get; set; }

    public ReportFilterBuilderStruct(string inpPropName, string inpClassName, string inpSubListName)
    {
        PropName = inpPropName;
        ClassName = inpClassName;
        SubListName = inpSubListName;
    }
}

和一個孩子:

public class DateReportFilterBuilderStruct : ReportFilterBuilderStruct
{
    public string SecondaryPropName { get; set; }

    public DateReportFilterBuilderStruct(string inpPropName, string inpSecondaryPropName, string inpClassName, string inpSubListName) : base(inpPropName, inpClassName, inpSubListName)
    {
        SecondaryPropName = inpSecondaryPropName;
    }
}

}

在我看來,它將用於存儲有關模型類屬性的一些數據。 editorListProp將同時存儲ReportFilterBuilderStructDateReportFilterBuilderStruct ,這就是為什么它是父類對象的List

var editorListProp = new List<NTStock.Models.ReportFilterBuilderStruct>();

現在我要訪問它們:

if (subItem.GetType() == typeof(NTStock.Models.ReportFilterBuilderStruct))
{
    <div class="row align-items-center">
        @Html.DisplayName(subItem.PropName)
    </div>
    <div class="row align-items-center  mb-2">
        @Html.Editor(subItem.PropName, "", new { htmlAttributes = new { @class = subItem.ClassName } })
    </div>
}
else
{
    <div class="row align-items-center">
        @Html.DisplayName(subItem.PropName)
    </div>
    <div class="row align-items-center mb-2">
        <div class="col-6">
            From:
            @Html.Editor(subItem.PropName, "", new { htmlAttributes = new { @class = subItem.ClassName } })
        </div>
        <div class="col-6">
            Till:
            @Html.Editor(subItem.SecondaryPropName, "", new { htmlAttributes = new { @class = subItem.ClassName } })
        </div>
    </div>
}

因此,關鍵是,即使我確保當前subItem的定義類型為DateReportFilterBuilderStruct ,我也無法訪問我的SecondaryPropName

您必須將subItemDateReportFilterBuilderStruct ,例如:

((DateReportFilterBuilderStruct)subItem).SecondaryPropName

這種方法可以在動態類型的語言(如Python)中使用,但不適用於C#。 您的列表的類型為List<ReportFilterBuilderStruct> 當您從列表中訪問某個項目,如list[0]你回來類型的對象ReportFilterBuilderStruct ,即使你存儲在DateReportFilterBuilderStruct那里GetType()正確返回DateReportFilterBuilderStruct

else分支中,您首先必須將項目轉換為DateReportFilterBuilderStruct

else
{
    @{ var dateReport = (DateReportFilterBuilderStruct)subItem; }
    <div class="row align-items-center">
        @Html.DisplayName(dateReport.PropName)
    </div>
    <div class="row align-items-center mb-2">
        <div class="col-6">
            From:
            @Html.Editor(dateReport.PropName, "", new { htmlAttributes = new { @class = dateReport.ClassName } })
        </div>
        <div class="col-6">
            Till:
            @Html.Editor(dateReport.SecondaryPropName, "", new { htmlAttributes = new { @class = dateReport.ClassName } })
        </div>
    </div>
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM