Фон
Работа в .NET 2.0 Здесь отображаются списки в целом. Первоначально я использовал t.IsAssignableFrom(typeof(IEnumerable))
, чтобы определить, поддерживает ли обходимое мной свойство интерфейс IEnumerable
. (И, таким образом, я мог безопасно прикрепить объект к нему)
Однако этот код не оценивался до True
, когда объект является BindingList<T>
.
Далее
Я пытался использовать t.IsSubclassOf(typeof(IEnumerable))
, но мне тоже не повезло.
Код
/// <summary>
/// Reflects an enumerable (not a list, bad name should be fixed later maybe?)
/// </summary>
/// <param name="o">The Object the property resides on.</param>
/// <param name="p">The Property We're reflecting on</param>
/// <param name="rla">The Attribute tagged to this property</param>
public void ReflectList(object o, PropertyInfo p, ReflectedListAttribute rla)
{
Type t = p.PropertyType;
//if (t.IsAssignableFrom(typeof(IEnumerable)))
if (t.IsSubclassOf(typeof(IEnumerable)))
{
IEnumerable e = p.GetValue(o, null) as IEnumerable;
int count = 0;
if (e != null)
{
foreach (object lo in e)
{
if (count >= rla.MaxRows)
break;
ReflectObject(lo, count);
count++;
}
}
}
}
Намерение
Я хочу в основном пометить списки, которые я хочу отразить с помощью ReflectedListAttribute
, и вызвать эту функцию для свойств, которые ее имеют. (Уже работает)
Оказавшись внутри этой функции, учитывая объект, на котором находится свойство, и связанное с PropertyInfo
, получите значение свойства, приведите его к IEnumerable (при условии, что это возможно), а затем выполните итерацию по каждому дочернему элементу и вызовите ReflectObject(...)
на ребенка с переменной count.