Timespan.Hour, возвращается из диапазона от -23 до 23 почему это int32? - PullRequest
1 голос
/ 23 марта 2012

Немного поигрался с классом TimeSpan, и я начал задумываться о том, почему все свойства класса timepan равны int32s?

Я понимаю, почему конструктор использует int32 при создании вашего временного промежутка, но если вы посмотрите документацию MSDN, в нем говорится:

"Часовой компонент текущей структуры TimeSpan. Возврат значение варьируется от -23 до 23. "

и что свойство выглядит так

public int Hours {get; }

Моей первой инстинктивной мыслью было то, что она делится какими-то данными с TimeSpan.TotalHours, но это в два раза больше.

Есть ли причина для того, чтобы это было int32 вместо int8, которое я полностью пропустил? или есть какая-то скрытая особенность в структуре, которую я пропустил?

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Работа с 32-разрядными целыми числами ничем не отличается от работы с меньшей точностью (например, Int16 или байтами) с точки зрения производительности.

Таким образом, согласованность здесь важнее, чем сохранение нескольких байтов здесь и там.

Другая проблема, которая может возникнуть, - это когда вы пытаетесь выполнить операции с меньшими целыми числами (сложение, умножение) и рискуетепереполнение или вы должны привести к большему целому числу.

1 голос
/ 23 марта 2012

int8 (он же SByte ):

Этот API не совместим с CLS.CLS-совместимая альтернатива - Int16.

Было бы необычно, если бы они решили представить не-CLS-совместимый тип в библиотеке базовых классов в рамках среды.Так что int8 определенно был бы неправильным выбором.И затем, как говорит @Aliostad, факт заключается в том, что более короткие интегральные значения, как правило, обрабатываются как полные 32-битные значения во время реальных операций - так что при использовании меньшего типа выигрыш в производительности отсутствует.

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