我的代码是这样的,float
是Control.CornerRadius:的数据类型
Application.Current.Resources.TryGetValue("RoundButtonSize", out object size);
control.CornerRadius = ((float)size) / 2;
然而,当我在第二行进行铸造时,它显示铸造无效,当我检查这里时,我发现它并没有像我预期的那样铸造成浮动:
var a = (float)size ;
它说a的数据类型是Struct System.Single
有人能告诉我演员阵容出了什么问题吗?
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 ;
假设这是您正在处理的对象类型:
https://learn.microsoft.com/en-us/dotnet/api/system.windows.cornerradius?view=netframework-4.7.2
强制转换为此类型,然后访问所需的相关角属性-共有四个角属性。当您使用一个Double的构造函数创建一个新的拐角半径实例时,它会将所有四个拐角设置为相同的值,但它们可以是不同的
var a = ((CornerRadius)size).TopLeft;
因此,您不能将其强制转换为float,因为它比这更复杂,有点像为一只四条腿的动物指定Animal a = new Animal(4)
,然后惊讶地发现您不能将动物强制转换为int并检索4
当您抱怨第二行的强制转换无效时,那是因为您无法将浮点值分配给CornerRadius类型的属性。文档指出应该这样使用:
control.CornerRadius = new CornerRadius(15);
@usr提出了一个很好的观点;你的第三行代码:
var a = (float)size ;
是转移注意力,让你远离最初的问题,转而关注"为什么当我将某个东西转换为float时,调试器会告诉我它是一个单一的问题?"这是一个单独的问题,也是同义词之一。如果您将某个内容强制转换为long
,调试器会告诉您它是Int64
,bool
与Boolean
同义,float
与Single
等同义。您称之为float/Single和运行时称之为它的内容与您不能将基元数字类型分配给CornerRadius这一事实无关-您必须分配CornerRadius类型的对象实例