Зачем использовать Decimal.Multiply против оператора умножения? - PullRequest
23 голосов
/ 21 марта 2011
decimal result = 100 * 200;

против

decimal result = Decimal.Multiply(100, 200);

Ответы [ 5 ]

20 голосов
/ 22 марта 2011

Использование Decimal.Multiply заставит умножение принимать входные данные типа decimal вместо любого типа, который используется и преобразуется в decimal.

Decimal.Multiply(decimal d1, decimal d2), и будет приводить в действие и выводитьтипа decimal.Где в качестве * вы могли бы сделать:

decimal result = yourDecimal * yourInt; 

Это позволяет вам смешивать и сопоставлять типы в некоторых случаях и будет обрабатывать все это за вас, но тип не обязательно будет десятичным в зависимости от того, какправая сторона определена.

11 голосов
/ 21 марта 2011

Оператор * перегружен и вызывает Multiply внутри.Это действительно просто вопрос читабельности.

9 голосов
/ 22 марта 2011

Оператор * перегружен для десятичных типов и идентичен Decimal.Multiply(). Однако перегруженный оператор * требует, чтобы хотя бы один из параметров был десятичным. В противном случае вызывается другой оператор *. В decimal result = 100 * 200 типы int сначала умножаются, а затем преобразуются в десятичные. Если результат умножения больше Int32.MaxValue, вы получите переполнение.

decimal d1 = 2147483647 * 2; // Overflow
decimal d2 = 2147483647m * 2; // OK
decimal d3 = Decimal.Multiply(2147483647, 2); // OK
4 голосов
/ 21 марта 2011

Некоторые языки не поддерживают перегруженные операторы;те должны вызывать метод Multiply ().

1 голос
/ 22 марта 2011

Для языка .NET не требуется прямая поддержка десятичных чисел, но в таком языке вы все равно можете использовать структуру System.Decimal. Поскольку также не требуется переопределение оператора поддержки языка .NET, методы необходимы для обеспечения полного использования в таком случае.

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