将对象强制转换为浮点类型,但它看起来像结构System.Single



我的代码是这样的,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,调试器会告诉您它是Int64boolBoolean同义,floatSingle等同义。您称之为float/Single和运行时称之为它的内容与您不能将基元数字类型分配给CornerRadius这一事实无关-您必须分配CornerRadius类型的对象实例

相关内容

最新更新