繁体   English   中英

我需要在结构C#中使用字段初始化的替代方法(结构中不能包含实例字段初始化器)

I need a alternative to using a field initialize in a struct C# (Cannot have instance field initializers in structs)

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

基本上,我理解为什么我在这里遇到错误,但是,我不确定要怎么做,这是我的代码:

public struct CashAmount
{
    public int leftNumberExact, decimalNumberExact;

    public string CashAmountExact = leftNumberExact + "." + decimalNumberExact;

    public float CashAmountApprox = float.Parese(CashAmountExact);
}

基本上,我试图使数据类型具有像int一样精确的精度,但也具有小数。 无论我为什么不使用ulong或double或某种其他形式的浮点精度,它都必须绝对精确。

2 个回复

此代码应执行您想要的操作。 您仍然需要初始化'leftNumberExact''decimalNumberExact' ,但其他属性将'decimalNumberExact'

public struct CashAmount
{
    public int leftNumberExact, decimalNumberExact;

    public string CashAmountExact
    {
         get:
         {
             return leftNumberExact + "." + decimalNumberExact;
         }
    }

    public decimal CashAmountApprox
    {
        get:
        {
            return decimal.Parse(CashAmountExact);
        }
    }
}

如您所见,我仅使用getter将字段设置为属性。

我还更改为'decimal'类型,应该完全准确。

如果约束实际上是“无论如何都必须绝对精确”,那么您应该使用强制执行这些约束的东西,例如github上的peteroupc的Numbers库。

请参阅EDecimal类该类强制执行此除法规则:

如果结果不准确,则返回NaN,因为该结果将具有无终止的十进制扩展。

例如,这意味着1/3 == NaN:

EDecimal.One.Divide(3) == NaN

总的来说,我认为这是过于严格的限制,您最好使用一个理智而直观的库,例如GMPLib的包装器(GNU多精度库),或者使用许多其他可用的库: 两个

如果您打算自己实现某些功能,那么至少要签出其他库,因为最终会得到类似于或基于BigInteger的功能

2 在C#中初始化结构?

我正在修改的一些代码通过将结构加载到字节数组或从字节数组加载来广泛使用结构与某些工厂设备进行通信。 这是一个这种结构的简化示例。 BYTE3_TYPE看起来像这样...... 如果我只是做一个 int和字节初始化为0,我假设因为它们是本机类型,但字节数组b3是* u ...

2013-02-04 17:06:41 1 321   c#
6 如何使用C#在Main方法中初始化需要的类之前

给出以下代码: 该程序将无法按原样成功运行,因为MessageProvider从未实际向InstanceFactory注册。 显然,可以将对MessageProvider.Register的调用添加到RandomMessage.Main的开头。 但是,这现在需要RandomMessa ...

2014-09-21 23:52:53 3 88   c#
7 为什么需要在Spring Boot中自动装配和初始化方法

我是Spring Boot的新手,已将@Component注释类自动连线到我的Application类。 在main方法中,然后尝试在此Autowired类上调用一个方法。 但是,当我从此Autowired类调用方法时,它告诉我“无法解析”。 如果必须像没有自动装配时那样实例化该类,自 ...

9 为什么C#编译器在字段初始化期间不能绑定实例委托?

查看众所周知的CS0236错误消息 错误(CS0236):字段初始化程序无法引用非静态字段,方法或属性,并且 进行这种限制的原因是初始化顺序: 您不能使用实例变量来初始化另一个实例变量。 但是, this不是一个实例变量,是什么呢? 我的问题是,为什么即使对于引用类方法也有如此严格的 ...

10 如何在Chefspec中初始化需要在配方中使用的变量

我在下面有配方模板资源块: 我做了这样的单元测试chefspec: 单元测试将失败,显示:source是”不是source: 'epel.repo.rhel7.erb' 。 似乎在测试中设置的REPO_TEMPLATE无效。 有人可以说出如何在单元测试中模拟值吗? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM