将对象强制转换为float类型,但其外观类似于struct System.Single

时间:2018-12-09 09:55:22

标签: c# uwp

我的代码如下所示,floatControl.CornerRadius的数据类型:

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

但是,当我在第二行进行强制转换时,它表示无效的强制转换,当我在此处进行检查时,我发现它没有强制转换为浮点数:

var a = (float)size ;

它表示a的数据类型为Struct System.Single

有人可以告诉我演员阵容我做错了什么吗?

2 个答案:

答案 0 :(得分:3)

CornerRadius接受参数DoubleSingle 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 ; ,调试器会告诉您它是longInt64等同于boolBoolean等同于float等。所谓的float / Single以及运行时所称的东西与您不能为CornerRadius分配原始数值类型这一事实没有任何关系-您必须为CornerRadius类型的对象实例分配