У вас есть большие проблемы, чтобы разобраться в первую очередь. Этот код плохо пахнет.
Проблема № 1: вы используете двоичное число с плавающей запятой для представления финансового количества. Двоичные числа с плавающей запятой предназначены для представления научных величин, в которых крошечные ошибки в последних нескольких битах точности не важны. Они крайне непригодны для представления точных финансовых показателей. Если вы представляете финансовые суммы, всегда используйте десятичную, никогда не используйте float.
Проблема № 2: Предположим, что у вас была веская причина использовать двоичную с плавающей точкой, не используйте float. Используйте двойной. Современное оборудование оптимизировано для выполнения арифметики двойной точности, а не одинарной точности; Есть ситуации, в которых единичная точность на самом деле медленнее. Конечно, double занимает вдвое больше памяти, чем float, но если у вас в памяти нет нескольких миллионов одновременно, это действительно не имеет значения. Кроме того, вы все равно должны использовать десятичную дробь, которая в четыре раза больше, чем float.
Проблема № 3: у вас есть изменяемый тип значения. Изменчивые типы значений являются чистым злом. Это так легко случайно вызвать ошибки с изменяемыми типами значений. Избегайте избегайте избегайте.
Проблема № 4: Это действительно правильное имя для структуры? Я думаю, что «торговая цена» будет представлена свойством Price. Есть ли лучшее название для этой вещи, которая более четко описывает то, что она представляет? Представляет ли это какую-то четкую концепцию в вашей сфере деятельности?
Проблема № 5: Вы не проверяете аргументы, передаваемые общедоступному конструктору публичной структуры. Это кажется опасным. Что если кто-то попытается обменять -100 акций по цене -100000.00 за акцию. Что просходит? Ничего хорошего, держу пари.
Проблема № 6: Значением по умолчанию для структуры всегда должен быть допустимый экземпляр структуры. Это? Экземпляр этой структуры по умолчанию: Price = 0, Quantity = 0. Имеет ли это смысл? Если это не так, то не делайте это структурой. Сделай это классом.
Проблема № 7: Это логически тип значения в первую очередь? Почему это структура? Это то, что, по вашему мнению, должно логически восприниматься как значение, например, число 12, или логически, как что-то, что вы можете называть «одним и тем же» в разных местах, например, клиент? Если это значение не является логически, не используйте тип значения.
Предполагая, что имя правильное и что это логически тип значения, ваш код должен быть примерно таким:
public struct TradePrice
{
public decimal Price {get; private set;}
public int Quantity {get; private set; }
public TradePrice(decimal price, int quantity) : this()
{
if (price < 0m) throw new ...
if (quantity < 0) throw new ...
this.Price = price;
this.Quantity = quantity;
}
}
Что касается ваших актуальных вопросов: нет логической разницы. может иметь разницу в производительности. У меня нет ни малейшего представления о том, есть ли здесь ощутимая разница в производительности или нет. Вы уже написали код в обоих направлениях. Возьми секундомер, запусти его миллиард раз в обе стороны, и тогда ты узнаешь ответ на свой вопрос.