= new();
object listObj = list;
Expression<Func<int, string>> expression = i => i.ToString();
object expressionObj = expression;
var listTypeCheck = listObj.GetType().GetGenericTypeDefinition() == typeof(List<>);
var expressionTypeCheck = expressionObj.GetType().GetGenericTypeDefinition() == typeof(Expression<>);
Console.WriteLine($"listTypeCheck: {listTypeCheck}, expressionTypeCheck: {expressionTypeCheck}");
// listTypeCheck: True, expressionTypeCheck: False
есть ли вообще способ проверить, что expressionObj это экземпляр дженерика Expression<T>?
IsAssignableFrom/To
оно вообще всегда false возвращает на опен генериках
GetGenericTypeDefinition и потом IsAssignbleFrom/To
List<string> list = new(); object listObj = list; Expression<Func<int, string>> expression = i => i.ToString(); object expressionObj = expression; var listTypeCheckFrom = listObj.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List<>)); var listTypeCheckTo = listObj.GetType().GetGenericTypeDefinition().IsAssignableTo(typeof(List<>)); var expressionTypeCheckFrom = expressionObj.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(Expression<>)); var expressionTypeCheckTo = expressionObj.GetType().GetGenericTypeDefinition().IsAssignableTo(typeof(Expression<>)); Console.WriteLine($"listTypeCheckFrom: {listTypeCheckFrom}, listTypeCheckTo: {listTypeCheckTo}, expressionTypeCheckFrom: {expressionTypeCheckFrom}, expressionTypeCheckTo: {expressionTypeCheckTo}"); listTypeCheckFrom: True, listTypeCheckTo: True, expressionTypeCheckFrom: False, expressionTypeCheckTo: False
А IsAssignbleFrom/To точно корректно работает с "открытыми" <> дженерик типами?
Обсуждают сегодня