小编Bac*_*ave的帖子

C#中的双倍与十进制舍入

为什么:

double dividend = 1.0;
double divisor = 3.0;
Console.WriteLine(dividend / divisor * divisor);
Run Code Online (Sandbox Code Playgroud)

输出1.0,

但:

decimal dividend = 1;
decimal divisor = 3;
Console.WriteLine(dividend / divisor * divisor);
Run Code Online (Sandbox Code Playgroud)

输出0.9999999999999999999999999999

我知道1/3不能精确计算,因此必须进行一些舍入.但是为什么Double将答案舍入1.0,但是Decimal没有?

另外,为什么双倍计算1.0/3.0为0.33333333333333331?如果使用舍入,那么最后3会不会舍入为0,为什么1?

c# double decimal rounding

6
推荐指数
1
解决办法
4698
查看次数

C#编译为CIL

我理解以下C#代码:

var evens = from n in nums where n % 2  == 0 select n;
Run Code Online (Sandbox Code Playgroud)

编译为:

var evens = nums.Where(n => n % 2 == 0);
Run Code Online (Sandbox Code Playgroud)

但它是什么意思,它编译到那?我的印象是C#代码直接编译成CIL?

c#

6
推荐指数
1
解决办法
333
查看次数

CLR 内部调用是用什么语言编写的?

Pro .NET Performance - Optimize Your C# Applications中第 86 页的底部,它谈到了 的实现ValueType.Equals()并说:

的定义CanCompareBitsFastEqualsCheck被推迟到CLR,它们是“内部通话”,在IL未实现

“内部调用”究竟是什么,如果不是 IL,它们是用什么语言实现的?

.net c# clr cil

6
推荐指数
1
解决办法
265
查看次数

如何强制 ASP.NET Core 源代码不被优化

我正在尝试调试 ASP.NET Core 框架中的防伪代码。

我已使用https://github.com/dotnet/aspnetcore/blob/master/docs/BuildFromSource.md中的说明使用调试配置成功构建了代码。

我已将源代码项目添加到我的测试项目中并引用它。

我检查过配置是否设置为调试。

我已确保已选中“抑制 JIT 优化”。

对于这两个项目,项目属性 -> 构建中的“优化代码”均未选中。

两个项目的“高级选项”(“构建”选项卡下)中的“调试信息”下拉列表已设置为“完整”。

但是,当我在 中命中断点时DefaultAntiforgeryTokenSerializer.Serialize(),在“监视”窗口中查看该方法的本地变量时,它会出现此错误:

无法获取本地或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化掉

在此输入图像描述

如何强制代码不被优化?

我正在使用 Visual Studio Enterprise 2019 v16.8.3。

c# visual-studio-debugging asp.net-core

6
推荐指数
1
解决办法
914
查看次数

Powershell函数名称为"主要"奇怪效应

看看这段代码:

main

function main
{
    cls
    Write-Host "hi"
}
Run Code Online (Sandbox Code Playgroud)

如果您是第一次运行它,将加载Windows鼠标属性窗口.

再次运行它会显示"hi".

为什么是这样?

我知道main.cpl是Mouse Properties窗口.但是为什么它只是第一次打开,然后第二次Powershell意识到你实际上想要调用"主要"功能.

如果你想要鼠标属性窗口,Powershell不应该检测到这个并要求你编写main.cpl吗?

powershell

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

装箱后改变结构

我有以下代码:

//Interface defining a Change method
internal interface IChangeBoxedPoint
{
    void Change(Int32 x, Int32 y);
}

internal struct Point : IChangeBoxedPoint 
{
    private Int32 m_x, m_y;

    public Point(Int32 x, Int32 y)
    {
        m_x = x;
        m_y = y;
    }

    public void Change(Int32 x, Int32 y)
    {
        m_x = x; m_y = y;
    }

    public override string ToString()
    {
        return String.Format("({0}, {1})", m_x.ToString(), m_y.ToString());
    }
}

public class Program
{
    static void Main(string[] args)
    {
        Point p = new Point(1, 1); …
Run Code Online (Sandbox Code Playgroud)

c# boxing

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

从InlineScript调用函数

如何从嵌套的InlineScript中调用工作流中的函数?以下内容引发异常,因为该函数超出InlineScript的范围:

Workflow test
{
    function func1
    {
        Write-Verbose "test verbose" -verbose
    }

    InlineScript
    {
        func1
    }
}
test
Run Code Online (Sandbox Code Playgroud)

powershell powershell-workflow

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

为什么我们需要Bower和Nuget?

当我们像Nuget这样的包管理器时,为什么我们需要另一个包管理器?

Bower取代了Nuget?

.net nuget-package bower

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

将部分 IP 地址字符串转换为 IP 地址对象

为什么System.Net.IpAddress允许以下字符串转换为有效的 IP 地址?

 $b = [ipaddress]"10.10.10"
 $b.IPAddressToString
 #10.10.0.10

 $c = [ipaddress]"10.10"
 $c.IPAddressToString
 #10.0.0.10

 $d = [ipaddress]"10"
 $d.IPAddressToString
 #0.0.0.10
Run Code Online (Sandbox Code Playgroud)

我可以看到模式是字符串中的最后一个八位字节是IPAddress对象中的最后一个八位字节,无论字符串中的第一个八位字节是什么,都用作 中最左边的八位字节IPAddress,并使用零填充中间未指定的八位字节,如果有的话。

但它为什么要这样做呢?作为用户,除非指定了所有八位字节,否则我希望它在转换过程中失败。因为它允许这些转换,所以在检查字符串是否是有效的 IP 地址时可能会出现这样的意外结果:

[bool]("10" -as [ipaddress]) #Outputs True
Run Code Online (Sandbox Code Playgroud)

ip powershell

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

如何强制具有一个元素的数组在json中生成方括号

我正在尝试使用以下方法创建 JSON 数组:

$bodyObject = @(
    @{    
        'Username' = 'email0@email.com'        
    }
)

$body = $bodyObject | ConvertTo-Json
Run Code Online (Sandbox Code Playgroud)

但该$body对象不包含方括号:

{
    "Username":  "email0@email.com"
}
Run Code Online (Sandbox Code Playgroud)

如果我向数组添加另一个元素,代码将完美运行:

$bodyObject = @(
    @{    
        'Username' = 'email0@email.com'        
    },
    @{    
        'Username' = 'email1@email.com'        
    }
)

$body = $bodyObject | ConvertTo-Json
<# Output:
[
    {
        "Username":  "email0@email.com"
    },
    {
        "Username":  "email1@email.com"
    }
]
#>
Run Code Online (Sandbox Code Playgroud)

如何获取一个元素数组来生成包含方括号的 JSON?

arrays powershell json

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