首页 文章

将对象转换为float类型,但它看起来像struct System.Single

提问于
浏览
3

我的代码看起来像这样, floatControl.CornerRadius的数据类型:

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

然而,当我在第二行进行施法时,它表示无效的施法,当我在这里检查时,我发现它没有像我期望的那样投射到浮动:

var a = (float)size ;

它说a的数据类型是 Struct System.Single

有人能告诉我演员的错误吗?

2 回答

  • 1

    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 ;
    
  • 3

    假设这是您正在处理的对象类型:

    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) ,然后惊讶于你不能将动物投射到一个int并检索 4

    当你抱怨第二行是无效的强制转换时,那是因为你不能将一个浮点数赋给一个类型为CornerRadius的属性 . 文档声明它应该像这样使用:

    control.CornerRadius = new CornerRadius(15);
    

    @usr提出了一个很好的观点;你的第三行代码:

    var a = (float)size ;
    

    ..是一个红色的鲱鱼,引导你远离原来的问题,并专注于“为什么当我把一些东西放到一个浮点数时调试器告诉我它是一个单独的?” - 单独的问题,和一个同义词 . 如果你将某些内容转换为 long ,调试器会告诉你它是 Int64boolBoolean 同义, floatSingle 等等 . 你称之为float / Single以及运行时调用它没有't have any bearing on the fact that you can' t将一个原始数值类型赋给CornerRadius - 您必须分配CornerRadius类型的对象实例

相关问题