小编use*_*789的帖子

IEquatable的类实现,用作字典中的键

我有一个由两个字符串和一个枚举组成的类.我正在尝试将此类的实例用作字典中的键.不幸的是,我似乎没有正确实现IEquatable.这是我如何做到的:

public enum CoinSide
{
    Heads,
    Tails
}

public class CoinDetails : IComparable, IEquatable<CoinDetails>
{
    private string denomination;
    private string design;
    private CoinSide side;

//...

    public int GetHashCode(CoinDetails obj)
    {
        return string.Concat(obj.Denomination, obj.Design, obj.Side.ToString()).GetHashCode();
    }

    public bool Equals(CoinDetails other)
    {
        return (this.Denomination == other.Denomination && this.Design == other.Design && this.Side == other.Side);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我似乎仍然无法在我的字典中查找项目.此外,以下测试失败:

    [TestMethod]
    public void CoinDetailsHashCode()
    {
        CoinDetails a = new CoinDetails("1POUND", "1997", CoinSide.Heads);
        CoinDetails b = new CoinDetails("1POUND", "1997", CoinSide.Heads);
        Assert.AreEqual(a.GetHashCode(), b.GetHashCode());
    }

    [TestMethod]
    public void …
Run Code Online (Sandbox Code Playgroud)

c# dictionary hashcode iequatable

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

无法加载dll文件 - 异常0x8007007E

我正在使用C#中的National Instruments Measurement Studio,我在将应用程序部署到特定计算机(运行Windows 7)时遇到了一些问题.我试过在National Instruments论坛上询问,但还没有得到任何解决方案 - 这里有人可以给我一些提示吗?

基本上,我已在多台计算机上多次部署此应用程序,但在这种特殊情况下,我在运行程序时收到错误 -

"System.DllNotFoundException:无法加载DLL nianlys.dll':指定的模块找不到(从HRESULT异常:0x80070007E).

  • 我确保nianlys.dll存在于C:\ Program Files(x86)\ National Instruments\Shared\Analysis中.

  • 我确保存在libiomp5md.dll和LV110000_BLASLAPACK.dll,来自mkl.msm(nianlys.dll依赖于mkl.msm)的文件.nianlys.dll也依赖于nimetautils.msm,但我不确定这包含哪些dll.

  • 我确保通过以管理员身份运行setup.exe来安装程序(而不是运行生成的.msi,请参阅此处).

  • 我通过Windows更新确保了有问题的计算机是最新的.net框架更新.

  • 我曾尝试多次重新安装程序,有时使用新重新编译的安装程序.

  • 我已经尝试手动将64位nianlys.msm添加到安装项目中 - 这会引发错误,因为安装项目的TargetPlatform属性设置为x86.当然,32位版本已经存在于检测到的依赖项中.

  • 有趣的是,从C:\ Program Files(x86)\ National Instruments\Shared\Analysis中获取nianlys.dll的副本并将其插入到安装程序的目录中会引发不同的错误 - 在这种情况下,错误是:

    "尝试加载格式不正确的程序.(HRESULT异常:0x8007000B)"

  • 从另一台计算机(默认位置C:\ Program Files\National Instruments\Shared\Analysis)获取64位版本的nianlys.dll副本并将其插入到安装程序的目录中会引发第三种类型的错误 - "System.DllNotFoundException:无法加载DLL'nianlys.dll':动态链接库(DLL)初始化例程失败.(HRESULT异常:0x8007045A)".应该注意的是,在程序运行的计算机上安装程序之前,此.dll存在,但在目标计算机上存在问题.

  • 使用相同的64位nianlys.dll并将其插入另一台计算机上找到的位置,C:\ Program Files\National Instruments\Shared\Analysis,无法解决原始错误.

  • 更有趣的是,我试图在程序运行的计算机上重现错误 - 删除x64版本的nianlys.dll会抛出原始的HRESULT:0x80070007E错误,而删除x86版本会导致运行时出现Windows安装程序该程序.

  • 在赖以程序的工作,没有任何问题的计算机上,Windows任务管理器似乎并没有表示该节目是32位(与节目名称中的*32后缀),尽管目标平台被设置为86.从这一切看来,尽管目标平台只是x86,但在x64和x86版本中使用nianlys.dll存在一些问题.

我已经没想到我可以尝试解决这个问题的方法了.

.net c# dll

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

标签 统计

c# ×2

.net ×1

dictionary ×1

dll ×1

hashcode ×1

iequatable ×1