如何在不未经检查的情况下做到这一点?

发布于 2024-08-22 21:37:29 字数 288 浏览 7 评论 0原文

几个月前,我编写了这段代码,因为这是我能想到的唯一方法(在学习 C# 时)。你会怎么做? unchecked 是执行此操作的正确方法吗?

unchecked //FromArgb takes a 32 bit value, though says it's signed. Which colors shouldn't be.
{
  _EditControl.BackColor = System.Drawing.Color.FromArgb((int)0xFFCCCCCC);
}

a few months ago I wrote this code because it was the only way I could think to do it(while learning C#), well. How would you do it? Is unchecked the proper way of doing this?

unchecked //FromArgb takes a 32 bit value, though says it's signed. Which colors shouldn't be.
{
  _EditControl.BackColor = System.Drawing.Color.FromArgb((int)0xFFCCCCCC);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

白昼 2024-08-29 21:37:29

它需要一个有符号的 int b/c,这可以追溯到 VB.NET 没有无符号值的时候。因此,为了保持 C# 和 VB.NET 之间的兼容性,所有 BCL 库都使用有符号值,即使它没有逻辑意义。

It takes a signed int b/c this dates back to the time when VB.NET didn't have unsigned values. So in order to maintain compatibility between C# and VB.NET, all the BCL libraries utilize signed values, even if it does not make logical sense.

一指流沙 2024-08-29 21:37:29

您可以分解 int 的各个组成部分,并使用 FromArgb() 重载将它们分开:

System.Drawing.Color.FromArgb( 0xFF, 0xCC, 0xCC, 0xCC);

You could break down the components of the int and use the FromArgb() overload that takes them separately:

System.Drawing.Color.FromArgb( 0xFF, 0xCC, 0xCC, 0xCC);
说谎友 2024-08-29 21:37:29

扩展方法可以隐藏这一点:

public static Color ToColor(this uint argb)
{
    return Color.FromArgb(unchecked((int)argb));
}

public static Color ToColor(this int argb)
{
    return Color.FromArgb(argb);
}

用法:

0xff112233.ToColor(); 
0x7f112233.ToColor();

似乎它们应该是另一种符号(如 0v12345678)或其他一些方法来解决此问题。

Extension methods can hide this:

public static Color ToColor(this uint argb)
{
    return Color.FromArgb(unchecked((int)argb));
}

public static Color ToColor(this int argb)
{
    return Color.FromArgb(argb);
}

Usage:

0xff112233.ToColor(); 
0x7f112233.ToColor();

Seems like they're should be another notation (like 0v12345678) or some other way to work around this issue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文