У меня есть 3 класса, как указано ниже: у одного есть информация для удаления, у остальных двух классов есть фактические данные. В будущем будет более 30 классов для данных
public class RemovalInformation<T> where T:class
{
public string TagName { get; set; }
public T Data { get; set; }
public Func<T, bool> RemovalCondition { get; set; }
}
public class PropertyReportData
{
public string PropertyName { get; set; }
}
public class ValuationData
{
public DateTime ValuationDate { get; set; }
}
У меня есть ниже ArrayList, который я хочу обработать
var removals = new ArrayList
{
new RemovalInformation<PropertyReportData>
{
Data = commercialReportData?.PropertyDetail,
TagName = nameof(PropertyReportData.PropertyName),
RemovalCondition = property => string.IsNullOrWhiteSpace(property.PropertyName),
},
new RemovalInformation<ValuationData>
{
Data = commercialReportData?.ValuationData,
TagName = nameof(ValuationData.ValuationDate),
RemovalCondition = property => property.ValuationDate< DateTime.Today,
}
};
ProcessRemovals(removals);
Метод ProcessRemovals
private void ProcessRemovals(ArrayList removals)
{
foreach (RemovalInformation<PropertyReportData> item in removals)
{
var deleteItem = item.RemovalCondition.Invoke(item.Data);
if (deleteItem)
{
//do something here
}
}
}
Проблема здесь в том, что в цикле foreach я могу получить доступ к RemovalInformation только одного типа. Есть ли способ перебрать список для нескольких типов RemovalInformation?
PropertyReportData
иValuationData
. Если вы этого не сделаете, базовым классом будет объект. И объект, безусловно, худшая вещь, которую вы могли бы даже использовать в качестве T/части T. Ниже вам нужно будет проверить, является ли текущий экземпляр одним из двух классов, а затем привести к нему. - person Christopher   schedule 08.08.2019