相关疑难解决方法(0)

M代表C#十进制文字符号的含义是什么?

为了使用十进制数据类型,我必须使用变量初始化来执行此操作:

decimal aValue = 50.0M;
Run Code Online (Sandbox Code Playgroud)

M部分代表什么?

c# decimal literals

282
推荐指数
4
解决办法
11万
查看次数

发送IL代码以加载小数值

我有这样的代码来发出加载整数或字符串值的IL代码.但我不知道如何添加decimal类型.该方法不支持它Emit.对此有何解决方案?

ILGenerator ilGen = methodBuilder.GetILGenerator();
if (type == typeof(int))
{
    ilGen.Emit(OpCodes.Ldc_I4, Convert.ToInt32(value, CultureInfo.InvariantCulture));
}
else if (type == typeof(double))
{
    ilGen.Emit(OpCodes.Ldc_R8, Convert.ToDouble(value, CultureInfo.InvariantCulture));
}
else if (type == typeof(string))
{
    ilGen.Emit(OpCodes.Ldstr, Convert.ToString(value, CultureInfo.InvariantCulture));
}
Run Code Online (Sandbox Code Playgroud)

不工作:

else if (type == typeof(decimal))
{
    ilGen.Emit(OpCodes.Ld_???, Convert.ToDecimal(value, CultureInfo.InvariantCulture));
}
Run Code Online (Sandbox Code Playgroud)

编辑:好的,所以这就是我做的:

else if (type == typeof(decimal))
{
    decimal d = Convert.ToDecimal(value, CultureInfo.InvariantCulture);
    // Source: https://msdn.microsoft.com/en-us/library/bb1c1a6x.aspx
    var bits = decimal.GetBits(d);
    bool sign = (bits[3] & 0x80000000) != 0;
    byte scale = …
Run Code Online (Sandbox Code Playgroud)

.net c# il reflection.emit

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

标签 统计

c# ×2

.net ×1

decimal ×1

il ×1

literals ×1

reflection.emit ×1