Итак, я отражаю некоторый код фреймворка 2.0 и в итоге получаю следующую деконструкцию
fixed (void* voidRef3 = ((void*) &_someMember))
{
...
}
Это не скомпилируется из-за 'The right hand side of a fixed statement assignment may not be a cast expression
'
Я понимаю, что Reflector может только приблизиться и обычно я вижу четкий путь, но это немного за пределами моего опыта.
Вопрос: что мне пытается описать Reflector?
Обновление:
также вижу следующее
fixed (IntPtr* ptrRef3 = ((IntPtr*) &this._someMember))
Обновление:
Итак, как говорит Митч, это не побитовый оператор, а оператор addressOf.
Вопрос сейчас:
fixed (IntPtr* ptrRef3 = &_someMember)
завершается с ошибкой компиляции 'Cannot implicitly convert type 'xxx*' to 'System.IntPtr*'. An explicit conversion exists (are you missing a cast?)
'.
Так что я, кажется, был проклят, если я это сделаю, и проклял, если я этого не сделаю. Есть идеи?
UPDATE:
Я думаю, что понял. Случайно я вернулся к выражению, которое использовало void*
, и удалил приведение, и VS прекратил жаловаться, и, поскольку я понял, что участники этого разговора void*
и intptr*
эквивалентны, я просто поменял их местами, в результате это:
fixed (void* ptrRef3 = &_someMember)
и В.С. перестал жаловаться. Может ли кто-нибудь проверить, что
fixed (void* ptrRef3 = &_someMember)
эквивалентно
fixed (IntPtr* ptrRef3 = &_someMember)