Visual Studio 2015 говорит, что "приведение избыточно". Почему?
У меня есть изображение шириной 888px и высотой 592px, с соотношением сторон ширина: высота как 3: 2.
Следующее производит неправильное значение 1, из-за вычисления целого числа/усечения как BitmapDecoder.PixelWidth и BitmapDecoder.PixelHeight - это uint (целое число без знака), а decoder ниже-объект BitmapDecoder.
double aspectRatio = decoder.PixelWidth / decoder.PixelHeight;
Ниже приведено ожидаемое правильное значение 1.5, но Visual Studio говорит, что "приведение избыточно", но почему?
double aspectRatio = (double)decoder.PixelWidth / (double)decoder.PixelHeight;
2 ответов:
Вам нужно только бросить один из uints, чтобы удвоить силу арифметики с плавающей запятой, так что либо:
double aspectRatio = decoder.PixelWidth / (double)decoder.PixelHeight;Или:
Лично я бы предпочел последнее, но это вопрос мнения.double aspectRatio = (double)decoder.PixelWidth / decoder.PixelHeight;
Просто чтобы дополнить ответ @ChrisF, вы можете увидеть это красиво в коде IL, где одно приведение к
doubleприведет к преобразованию для обоих значений:IL_0013: stloc.0 // decoder IL_0014: ldloc.0 // decoder IL_0015: callvirt UserQuery+Decoder.get_PixelHeight IL_001A: conv.r.un // convert uint to float32 IL_001B: conv.r8 // convert to float64 (double) IL_001C: ldloc.0 // decoder IL_001D: callvirt UserQuery+Decoder.get_PixelWidth IL_0022: conv.r.un // convert uint to float32 IL_0023: conv.r8 // convert to float64 (double)
Comments