Должен ли `System.IO.Path` быть конкретным? - PullRequest
2 голосов
/ 21 августа 2009

Члены класса Path, такие как Path.Combine, являются обязательными. Они приводят к хорошему, чистому, правильному коду. К сожалению, если вы используете его для чего-то вроде управления путями заголовка в препроцессоре C ++, вы быстро поймете, что он показывает больше, чем ожидалось в профилировщике. Почему?

Исключения: ArgumentException: path1 или path2 содержат один или несколько недопустимых символов, определенных в GetInvalidPathChars.

Даже без проверки команда комбинирования - это O (n) (поскольку она должна копировать содержимое строки). Однако это намного дешевле, чем проверка существования любого из GetInvalidPathChars '~ 40 членов.

Я считаю, что класс Path должен быть неизменного типа, который содержит строку, о которой известно, что она не содержит недопустимых символов. Должны быть предусмотрены статические члены для работы с string (как сейчас существует) и добавлен идентичный набор для работы с Path объектами. Внесение этого изменения в .NET Framework:

  • Не является критическим изменением (изменение статического класса на герметичный бетонный тип не нарушается)
  • Значительно улучшает производительность нескольких лучших практик

Мнения

1 Ответ

2 голосов
/ 21 августа 2009

Класс Uri может предоставить такую ​​функциональность, если вы не возражаете против синтаксиса file: //. Я думаю, что .Net в любом случае предпочитает использовать класс Uri, поскольку это может позволить находить ресурсы, отличные от только локальных файлов, хотя для этого требуется дополнительная работа на стороне программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...