我希望实现一个 IEqualityComparer 类,用于存储和比较四舍五入到最接近的 0.01 的浮点键。特别是,我想确保正确实现 GetHashCode 方法。我想让这尽可能高效。我可以只使用浮点值本身作为它自己的哈希值吗?
我可以乘以 100,转换为 int 并使用 int 作为键,但我很好奇是否可以使用 float 键来完成此操作。
注意:我会将字典包装在一个类中,以确保只添加或比较四舍五入到 0.01 的值。
后续问题:如果我使用 Decimal(保证始终四舍五入为 0.01),我可以仅使用 Decimal 与字典中的 Decimal 键的默认比较器吗?
我的第一个想法是尝试这个实现。有什么陷阱吗?
class FloatEqualityComparer : IEqualityComparer<float>
{
public bool Equals(float b1, float b2)
{
int i1 = (int)(b1 * 100);
int i2 = (int)(b2 * 100);
if(i1 == i2)
return true;
else
return false;
}
public float GetHashCode(float x)
{
return x;
}
}
Run Code Online (Sandbox Code Playgroud) 我需要初始化一个将从类的许多实例访问的字段.初始化需要一些计算,并且将有数百万个实例,因此我需要初始化仅发生一次,并且要在所有实例之间共享变量以节省内存.最后,我想在抽象类中实现这一点.
如何初始化运行时my_val计算的静态变量CalculateMyVal()?
abstract class MyAbstract
{
static readonly int my_val;
int CalculateMyVal()
{
int x = 1;
// Long Calculation on x
return x;
}
}
Run Code Online (Sandbox Code Playgroud) 在下面的三个属性中,BarProp每个类实例只需要4个字节的内存吗?
class Foo
{
int BarEmptySet { get { return 0; } set { } }
int BarNoSet { get { return 0; } }
int BarProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)