Versuchen Sie es. Es kann feststellen, ob eine Liste eine Liste eines bestimmten Typs ist. Basierend darauf sollten Sie in der Lage sein, nach einem bestimmten Typ zu filtern.
public class TypeA
{ }
public class TypeB
{ }
public class GenericFilter
{
public bool IsOfType<T>(IEnumerable<dynamic> objectToInspect)
{
var genericType = objectToInspect.GetType().GenericTypeArguments[0];
return genericType == typeof(T);
}
}
[TestClass]
public class UnitTest1
{
[TestMethod]
public void IdentifiesExpectedType()
{
var classToInspect = new List<TypeA>();
var filter = new GenericFilter();
Assert.IsTrue(filter.IsOfType<TypeA>(classToInspect));
}
[TestMethod]
public void RejectsNonMatchingType()
{
var classToInspect = new List<TypeA>();
var filter = new GenericFilter();
Assert.IsFalse(filter.IsOfType<TypeB>(classToInspect));
}
}
Dies funktioniert genauso gut:
public bool IsOfType<T>(IEnumerable<dynamic> listToFilter)
{
return (listToFilter as IEnumerable<T>) != null;
}
Dies wird eine Liste von Listen nehmen und gruppieren sie in eine Dictionary<Type, List<List<dynamic>>
wo alle Listen für jeden Schlüssel davon sind Art. Auf diese Weise können Sie Listen vom Typ T auswählen, indem Sie sie einfach aus dem Wörterbuch abrufen.
public Dictionary<Type, List<List<dynamic>>> GroupListsByType(List<List<dynamic>> lists)
{
var types = lists.Select(list => list.GetType().GenericTypeArguments[0]).Distinct().ToList();
var grouped = new Dictionary<Type, List<List<dynamic>>>();
types.ForEach(type =>
{
grouped.Add(type, new List<List<dynamic>>());
grouped[type].AddRange(lists.Where(list=>list.GetType().GenericTypeArguments[0] == type));
});
return grouped;
}
(ich bin nicht in Frage nach dem „Warum“. Ich weiß nicht, ob ich das empfehlen würde, aber es ist interessant zu schreiben.)
Könnten Sie ein Codebeispiel von hinzufügen, was du bist versuchen zu tun/was du probiert hast? –
Sie können '.OfType' auf Ihrer Liste verwenden, um nach Typ zu filtern:' list.OfType() '- aber es ist unwahrscheinlich, dass Ihre Anforderung" durch Reflektion "abgedeckt wird. –
"Elementtyp ist bis zur Laufzeit nicht bekannt" - welchen Mechanismus verwenden Sie, um * den Elementtyp zur Laufzeit anzugeben *? Woher weißt du, dass der Typ (zur Laufzeit) die gewünschte Eigenschaft hat? Was ist dein Basistyp, der gegen die 'generische Liste' definiert ist oder ist es nur 'var list = new [];' und du hast nicht die richtigen Begriffe verwendet. Wenn Sie Ihren bisherigen Code hinzufügen, können Sie diese Fragen beantworten. –