Первое соображение вызывает удивление, почему они выбрали double в качестве возвращаемого значения. Использование long было бы очевидным выбором. Несмотря на то, что уже есть очень хорошее свойство, которое является длинным, Ticks недвусмысленны с единицей измерения в 100 наносекунд. Но они выбрали двойной, вероятно, с намерением вернуть дробное значение.
Однако это создало новую проблему, которая, возможно, была обнаружена позже. Двойник может хранить только 15 значащих цифр. TimeSpan может хранить 10000 лет. очень желательно преобразовать из TimeSpan в миллисекунды, затем обратно в TimeSpan и получить то же значение.
Это невозможно с двойным. Делаем математику: 10000 лет - это примерно 10000 x 365,4 x 24 x 3600 x 1000 = 315 705 600 000 000 миллисекунд. Отсчитайте 15 цифр, лучше всего это может сделать двойное число, и вы получите ровно одну миллисекунду как наименьшую единицу, которую можно сохранить без ошибки округления. Любые дополнительные цифры будут случайным шумом.
Застряв между молотом и наковальней, разработчикам (тестерам?) Пришлось выбирать между округлением значения при преобразовании из TimeSpan в миллисекунды. Или сделать это позже при переходе от миллисекунд к TimeSpan. Они решили сделать это рано, смелое решение.
Решите вашу проблему, используя свойство Ticks и умножив на 1E-4, чтобы получить миллисекунды.