小编jul*_*old的帖子

将十进制数舍入到非零的第一个小数位

我想将一个数字缩短为非0的第一个有效数字.后面的数字应该是四舍五入的.

例子:

0.001 -> 0.001
0.00367 -> 0.004
0.00337 -> 0.003
0.000000564 -> 0.0000006
0.00000432907543029 ->  0.000004
Run Code Online (Sandbox Code Playgroud)

目前我有以下程序:

if (value < (decimal) 0.01)
{
    value = Math.Round(value, 4);
}
Run Code Online (Sandbox Code Playgroud)

注意:

  • 数字永远是积极的
  • 有效位数始终为1
  • 大于0.01的值将始终舍入到两位小数,因此if <0.01

从上面的示例中可以看出,舍入到4个小数位可能不够,值可能会有很大差异.

.net c# math decimal rounding

19
推荐指数
1
解决办法
1163
查看次数

为 .net 6.0 创建单元测试

我创建了一个 .Net 6 类库,现在我正在尝试创建一个测试项目。
.net 6 测试项目不可用。在网上我找到了使用.Net Framework或.Net core的信息来进行测试。

我创建了一个 .Net Framework 4.8 测试项目并引用了我的类库。

我收到编译器错误:

项目“..\CircularList\CircularList.csproj”目标为“net6.0”。它无法被面向“.NETFramework,Version=v4.8”的项目引用。单元测试

那么我该如何进行单元测试呢?有没有办法从 .Net Framework 4.8 转向 .Net 6.0?

.net c# unit-testing .net-4.8

16
推荐指数
2
解决办法
1万
查看次数

更改组合框边框轮廓颜色

我正在尝试管理ComboBox的颜色。虽然可以更改背景颜色,但找不到边框轮廓的属性。

由于箭头的缘故,在黑暗的主题中仅画一个正方形作为边框是行不通的。这使我得出以下结论:该边框可能是实际的图像文件。

是否可以替换呢?

在此处输入图片说明

更新: 我已经实现了@AhmedAbdelhameed的解决方案-现在看起来好多了。但是对于平面样式,我必须像下面那样调整矩形:

using (var p = new Pen(this.BorderColor, 1))
{
    g.DrawRectangle(p, 0, 0, Width - buttonWidth - 1, Height - 1);
}
Run Code Online (Sandbox Code Playgroud)

我还交换了“ BorderColor”以匹配我的其他UI:

public CustomComboBox()
{
    BorderColor = Color.Gray;
} 
Run Code Online (Sandbox Code Playgroud)

到目前为止的结果是: 在此处输入图片说明 在此处输入图片说明

我现在想做的是仅在深色主题中更改实际的下拉按钮(也许带有叠加png)

更新: 我已经能够使用以下代码向自定义控件添加pricturebox:

using (var g = Graphics.FromHwnd(Handle))
{
    using (var p = new Pen(this.BorderColor, 1))
    {
        g.DrawRectangle(p, 0, 0, Width - buttonWidth - 1, Height - 1);
    }
    if (Properties.Settings.Default.Theme == "Dark")
    {
        g.DrawImageUnscaled(Properties.Resources.dropdown, new Point(Width - buttonWidth - 1));
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# combobox winforms

5
推荐指数
1
解决办法
2232
查看次数

Visual Studio 不再打开 Winforms 的图形编辑器

我正在构建非常小的 15 分钟应用程序,它可以帮助我和我的同事进行简单的日常业务工作。

为此,我经常使用 WinForm,因为它只制作一个带有 2 个文本框和一个提交按钮的窗口就太快了。

不幸的是,最近我想我按下了一个按钮,图形编辑器将不再打开。我将始终处于文本编辑器视图中。

在网上我找不到关于如何打开这个该死的设计师的任何信息。我希望你们中有人知道答案。

问题: 这将打开: 在此处输入图片说明

应该: 在此处输入图片说明

c# visual-studio winforms

3
推荐指数
1
解决办法
1957
查看次数

Math.Sin() 给出的值不正确

给出以下代码:

double sin = Math.Sin(59.0);
double sin2 = Math.Sin(31.0);
Run Code Online (Sandbox Code Playgroud)

第一个结果是 0.64.. 第二个结果是 -0.4..

如果我在计算器中输入相同的数字:
sin(59) = 0.86..
sin(31) = 0.51..

我做错了什么?

math trigonometry s

3
推荐指数
1
解决办法
688
查看次数

创建覆盖其他应用程序的 Xamarin 应用程序

我正在尝试创建一个 xamarin android 应用程序,它应该有一个小的覆盖窗口,显示在其他应用程序之上。

不幸的是,我还没有找到示例代码或文档。

我想要实现的目标类似于 Apple Control Dot、Facebook chat-dot 或 google 地图导航覆盖层。

我的手机上还安装了一个简单的 makro 记录器应用程序,只要启用了“在其他应用程序之上绘制”的辅助功能权限,该应用程序就可以执行此操作。 示例覆盖窗口

在上面的屏幕截图中,您可以看到右侧的小录制控件。可以在屏幕上拖动控制覆盖图、打开设置等。

有人知道如何做到这一点吗?

此致,

朱利安

android overlay xamarin android-picture-in-picture

2
推荐指数
1
解决办法
2605
查看次数

如何在dotnet中将“”解析为long(“0”)

给出以下代码:

string example = "1234";
long parsed_example = long.Parse(example);
Console.Writeline(parsed_example);
# => 1234
Run Code Online (Sandbox Code Playgroud)

效果很好。

以下示例则不然:

string example = "";
long parsed_example = long.Parse(example);
# [System.FormatException: Input string was not in a correct format.]
Run Code Online (Sandbox Code Playgroud)

然而目标是:

string example = "";
if (example == "")
{
    example = "0";
}
long parsed_example = long.Parse(example);
Console.Writeline(parsed_example);
# => 0
Run Code Online (Sandbox Code Playgroud)

有没有更短、更合适的解决方案?上面的代码几乎可以证明一个小函数是合理的,我最好有一个内联解决方案。也许是这样的(伪代码):

string example = "";
long parsed_example = example ?? 0, long.Parse(example);
Run Code Online (Sandbox Code Playgroud)

.net c# parsing long-integer

2
推荐指数
1
解决办法
460
查看次数

c#中IF子句中更短版本的OR运算符

我相信每个人都知道在csharp中带有'或'的if子句:

bool bananaIsYellow = true;
bool bananaIsBrown = false;
if (bananaIsYellow || bananaIsBrown) bool bananaIsRipe = true;
Run Code Online (Sandbox Code Playgroud)

事情是,一旦你开始比较字符串,这会变得非常混乱:

string bananaColor = yellow;
if (bananaColor == "yellow" || 
    bananaColor == "brown" ||
    bananaColor == "blue")
{
    bool bananaIsRipe = true;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法缩短这个?

我知道的唯一方法就是这样(显然不是更漂亮或更短):

string bananacolor = "yellow";
if (StringComparer(bananacolor, new string[] { "yellow", "brown", "blue" })) { bool bananaIsRipe = true; }
}
private static bool StringComparer(string source, string[] values)
{
    foreach (var value in values)
    {
        if (source == value) …
Run Code Online (Sandbox Code Playgroud)

c# if-statement operator-keyword

0
推荐指数
1
解决办法
90
查看次数

良好的编码实践 - 在一行代码中编写多个命令 C#

我想创建一个字符串模式,这需要我编写 2 行代码:

string linePattern = "|";
for (int i = 0; i < columns; i++) linePattern += "{" + i + ",-" + sizes[i] + "}|";
Run Code Online (Sandbox Code Playgroud)

现在将其写在一行中以更容易地查看字符串是由什么组成的,这被认为是好还是坏做法:

string linePattern = "|"; for (int i=0; i<columns; i++) linePattern += "{"+i+",-"+sizes[i]+ "}|";
Run Code Online (Sandbox Code Playgroud)

最终字符串例如:

"|{0,-4}|{1,-2}|{2,-7}|{3,-3}|{4,-8}|";
Run Code Online (Sandbox Code Playgroud)

编辑:

这个问题的原因是,在我看来,在两个单独的行中进行变量声明和赋值是非常丑陋的。是否有另一种方法来编写这个字符串被认为是好的做法?(请注意,此模式可能需要根据列的数量进行扩展)

string linePattern = /* string generator here */;

echo("linePattern = |{0,-4}|{1,-2}|{2,-7}|{3,-3}|{4,-8}| ");
Run Code Online (Sandbox Code Playgroud)

c#

-1
推荐指数
1
解决办法
1635
查看次数