170 похожих чатов

Почему проверка типа для Expression<T> и List<T> работает по-разному? List<string> list

= 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

7 ответов

24 просмотра
Lycanthrope- Автор вопроса

есть ли вообще способ проверить, что expressionObj это экземпляр дженерика Expression<T>?

IsAssignableFrom/To

Lycanthrope- Автор вопроса
Phantom
IsAssignableFrom/To

оно вообще всегда false возвращает на опен генериках

GetGenericTypeDefinition и потом IsAssignbleFrom/To

Lycanthrope- Автор вопроса
Phantom
GetGenericTypeDefinition и потом IsAssignbleFrom/T...

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

Phantom
GetGenericTypeDefinition и потом IsAssignbleFrom/T...

А IsAssignbleFrom/To точно корректно работает с "открытыми" <> дженерик типами?

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта