Создание файла Uri в C # - PullRequest
       19

Создание файла Uri в C #

2 голосов
/ 29 августа 2011

Я думаю, что упускаю что-то очевидное ....

Я читал код в новом проекте и обнаружил код, эквивалентный следующему:

var filePath = @"C:\temp\tmp1234.tmp";    // Generally obtained from System.IO.* calls
var uri = new Uri("file://" + filePath);

Я думал, что это будет эквивалентно:

var filePath = @"C:\temp\tmp1234.tmp";
var uri = new Uri(filePath);

(при условии, что класс Uri может проанализировать путь к файлу, вывести схему и сделать все, что нужно для экранирования).

Так как код, кажется, работает, и это делается так часто и так последовательно, я предполагаю, что у оригинального разработчика была веская причина для использования идиомы "file://" + filePath. Может ли кто-нибудь подсказать мне, что это может быть за причина?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 29 августа 2011

Они оба генерируют абсолютно идентичные Uri объекты, за исключением (очевидно) для OriginalString.

Вы можете увидеть это в LINQPad :

var filePath = @"C:\temp\tmp1234.tmp";    // Generally obtained from System.IO.* calls
new []{ 
    new Uri("file://" + filePath),
    new Uri(filePath)
}.Dump();

Я полагаю, что первоначальный разработчик не знал об этом.

1 голос
/ 29 августа 2011

На самом деле, добавление «file: //» вызывает схему и, следовательно, пропускает необходимость для .NET вызывать метод «ParseSchemeCheckImplicitFile» ... так что ... [незначительно] быстрее.

Это, и, это явно - что я предпочитаю лично.

РЕДАКТИРОВАТЬ: На самом деле, я должен был сказать, что он пропускает много кода в этом методе.

...