我的代码如下所示,float
是Control.CornerRadius的数据类型:
Application.Current.Resources.TryGetValue("RoundButtonSize", out object size);
control.CornerRadius = ((float)size) / 2;
但是,当我在第二行进行强制转换时,它表示无效的强制转换,当我在此处进行检查时,我发现它没有强制转换为浮点数:
var a = (float)size ;
它表示a的数据类型为Struct System.Single
有人可以告诉我演员阵容我做错了什么吗?
答案 0 :(得分:3)
CornerRadius接受参数Double。 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而不是var a。
我不知道你在做什么
var a = (float)size ;
答案 1 :(得分:1)
假设这是您要处理的对象类型:
https://docs.microsoft.com/en-us/dotnet/api/system.windows.cornerradius?view=netframework-4.7.2
投射至该类型,然后访问所需的相关角属性-其中有四个。当您使用采用一个Double的构造函数创建新的拐角半径实例时,会将所有四个拐角设置为相同的值,但它们可以不同
var a = ((CornerRadius)size).TopLeft;
因此,您不能将其转换为浮点数,因为它比这更复杂,有点像为四足动物指定Animal a = new Animal(4)
,然后惊讶于您无法将动物转换为整数并检索{ {1}}
当您抱怨第二行无效转换时,这是因为无法将浮点数分配给CornerRadius类型的属性。文档指出应该这样使用:
4
@usr很好;您的第三行代码:
control.CornerRadius = new CornerRadius(15);
..是一个红色的鲱鱼,使您摆脱了原来的问题,而专注于“为什么调试器告诉我为什么将单个对象转换为浮点数?”-单独的问题,以及一个同义词。如果将某些内容投射到var a = (float)size ;
,调试器会告诉您它是long
,Int64
等同于bool
,Boolean
等同于float
等。所谓的float / Single以及运行时所称的东西与您不能为CornerRadius分配原始数值类型这一事实没有任何关系-您必须为CornerRadius类型的对象实例分配