Универсальный подобный BitConverter метод?

Для Linux:

$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'open.*tnsnames.ora'

шоу что-то вроде этого:

open("/opt/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora",O_RDONLY)=7

Изменение на

$ strace sqlplus -L scott/tiger@orcl 2>&1| grep -i 'tnsnames.ora'

покажет все пути к файлам, которые перестали работать.

5
задан Ryan Stecker 21 September 2009 в 17:04
поделиться

3 ответа

Вместо того, чтобы пытаться сделать это через манипуляции с указателем, вы должны переключить свой код на использование Mashal.PtrToStructure . Этот метод специально разработан для этого сценария.

9
ответ дан 18 December 2019 в 07:55
поделиться

Из RFC 1738 , где в URL-адресах разрешены символы:

Только буквенно-цифровые символы, специальные символы «$ -_. +! * '(),» и могут использоваться зарезервированные символы, используемые для их зарезервированных целей не закодированы в URL.

Зарезервированные символы: ";", "/", "?", ":", "@", "=" и "&", что означает, что вам потребуется URL-кодирование их, если вы хотите их использовать.

кажется странным, потому что вы должны уметь выполнять указанные выше операции на основе ограничения метода where T: struct

Не совсем. У вас могут быть необработанные указатели на неуправляемые типы . Это определено в спецификации языка C # (18.2) следующим образом:

В отличие от ссылок (значений ссылочных типов), указатели не отслеживаются сборщиком мусора - сборщик мусора не знает указателей и данных, на которые они указывают . По этой причине указателю не разрешается указывать на ссылку или на структуру, содержащую ссылки, а типом референта указателя должен быть неуправляемый тип . Это определено в спецификации языка C # (18.2) следующим образом:

В отличие от ссылок (значений ссылочных типов), указатели не отслеживаются сборщиком мусора - сборщик мусора не знает указателей и данных, на которые они указывают . По этой причине указателю не разрешается указывать на ссылку или на структуру, содержащую ссылки, а референтный тип указателя должен быть неуправляемым типом . Это определено в спецификации языка C # (18.2) следующим образом:

В отличие от ссылок (значений ссылочных типов), указатели не отслеживаются сборщиком мусора - сборщик мусора не знает указателей и данных, на которые они указывают . По этой причине указателю не разрешается указывать на ссылку или на структуру, содержащую ссылки, а типом референта указателя должен быть неуправляемый тип . Неуправляемый тип - это любой тип, который не является ссылочным типом и не содержит полей ссылочного типа ни на каком уровне вложенности. Другими словами, неуправляемый тип является одним из следующих:

  • sbyte , byte , short , ushort ], int , uint , long , ulong , char , float , double , decimal или bool .
  • Любой enum-type .
  • Any указатель-тип .
  • Любой определяемый пользователем тип структуры , который содержит поля только неуправляемых типов .

Таким образом, существует довольно много ограничений, и для универсального метода , Т: struct может или не может соответствовать им для любого конкретного экземпляра, поэтому конструкция вроде T * является недопустимой. Было бы неплохо иметь специальное ограничение параметра универсального типа для охвата неуправляемых типов, но в его нынешнем виде в CLR его нет.

8
ответ дан 18 December 2019 в 07:55
поделиться

В какой-то момент я написал эту статью , объясняющую, как именно это сделать, но во много раз быстрее, чем Marshal.PtrToStructure. В примере кода используется динамическая генерация кода для копирования универсального типа T в / из потока битов.

2
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

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