Приведите объект к типу с плавающей точкой, но он выглядит как структура System.Single - PullRequest
0 голосов
/ 09 декабря 2018

Мой код выглядит следующим образом, а float - это тип данных Control.CornerRadius :

Application.Current.Resources.TryGetValue("RoundButtonSize", out object size);
control.CornerRadius = ((float)size) / 2;

Однако, когда я выполняю приведение во второй строке, оно говорит, что неверное приведение икогда я проверил здесь, я обнаружил, что он не приводится к типу с плавающей точкой, как я ожидаю:

var a = (float)size ;

Он говорит, что тип данных a * Struct System.Single

Может кто-нибудь сказать мне, что ячто-то не так с актерами?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

CornerRadius принимает параметр Double .A Single Struct является поплавком.

control.CornerRadius = ((float)size) / 2;

Следует читать:

control.CornerRadius = new CornerRadius((double)size/2);

Я бы предположил, что это

It says that the datatype of a is Struct System.Single

относится к CornerRadius, а не к переменной.

Iпонятия не имею, что ты делаешь с

var a = (float)size ;
0 голосов
/ 09 декабря 2018

Предполагая, что это тип объекта, с которым вы имеете дело:

https://docs.microsoft.com/en-us/dotnet/api/system.windows.cornerradius?view=netframework-4.7.2

Приведите к этому типу и затем получите доступ к нужному угловому свойству - их четыре.Когда вы создаете новый экземпляр радиуса угла, используя конструктор, который принимает один дубль, он устанавливает все четыре угла на одно и то же значение, но они могут отличаться

var a = ((CornerRadius)size).TopLeft;

Следовательно, вы не можете привести его к плавающей точке, потому что этоболее сложный, чем-то вроде указания Animal a = new Animal(4) для четвероногого животного, а затем удивление, что вы не можете привести животное к int и получить 4

Когда вы жаловались, что вторая строка быланеверное приведение, потому что вы не можете присвоить float свойству типа CornerRadius.Документы утверждают, что его следует использовать следующим образом:

control.CornerRadius = new CornerRadius(15);

@ usr хорошо подходит;Ваша третья строка кода:

var a = (float)size ;

.. - красная сельдь, которая уводит вас от первоначальной проблемы и концентрирует внимание на том, «почему, когда я бросаю что-то в число с плавающей точкой, отладчик говорит мне, что это одна? »- отдельный вопрос, и один из синонимов.Если вы приведете что-то к long, отладчик скажет вам, что это Int64, bool является синонимом Boolean, float с Single и т. Д. То, что вы называете float / Single и что вызывает среда выполненияэто не имеет никакого отношения к тому факту, что вы не можете назначить примитивный числовой тип для CornerRadius - вы должны назначить экземпляр объекта типа CornerRadius

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