Преобразование неупаковки C# универсального перечисления к интервалу?

Можно добавить пульты ДУ с git remote add <name> <url>

, можно тогда продвинуть к удаленному с git push <name> master:master для продвижения локального основного ответвления к удаленному основному ответвлению.

при создании repo с git clone удаленное называют origin, но можно создать public репозиторий для сервера онлайн и нажатия к нему с git push public master:master

62
задан Ian Kemp 19 August 2014 в 10:08
поделиться

2 ответа

Я не уверен, что это возможно в C # без использования Reflection.Emit. Если вы используете Reflection.Emit, вы можете загрузить значение перечисления в стек, а затем рассматривать его как int.

Однако вам нужно написать довольно много кода, поэтому вы захотите проверить, действительно ли вы при этом повысите производительность.

Я считаю, что эквивалентный IL будет:

.method public hidebysig instance int32  Foo<valuetype 
    .ctor ([mscorlib]System.ValueType) TEnum>(!!TEnum 'value') cil managed
{
  .maxstack  8
  IL_0000:  ldarg.1
  IL_000b:  ret
}

Обратите внимание, что это завершится ошибкой, если ваше перечисление получено из long (64-битное целое число).

EDIT

Еще одна мысль об этом подходе. Reflection.Emit может создать метод, указанный выше, но единственный способ привязки к нему - это виртуальный вызов (т.е. он реализует известный интерфейс / абстракцию во время компиляции, который вы могли бы вызвать) или косвенный вызов (т.е. через вызов делегата). Я полагаю, что оба этих сценария в любом случае будут медленнее, чем накладные расходы на упаковку / распаковку.

Также не забывайте, что JIT не тупой и может позаботиться об этом за вас. ( РЕДАКТИРОВАТЬ см. Комментарий Эрика Липперта по исходному вопросу - он говорит, что джиттер в настоящее время не выполняет эту оптимизацию. )

Как и со всеми проблемами, связанными с производительностью: измерять, измерять, измерять!

18
ответ дан 24 November 2019 в 16:47
поделиться

Думаю, вы всегда можете использовать System.Reflection.Emit для создания динамического метода и выдачи инструкций, которые делают это без упаковки, хотя это может быть непроверяемым.

3
ответ дан 24 November 2019 в 16:47
поделиться
Другие вопросы по тегам:

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