小编Fra*_*nin的帖子

有没有办法使.NET Core GetHashCode具有确定性

我只是浪费了几个小时的调试才意识到与.NET相反,在.NET Core中,每次运行代码时,GetHashCode都会返回不同的值.我完全理解这个的基本原理.依赖哈希码值是一个非常糟糕的想法(比如序列化它们).我甚至记得微软(在Core之前)的.NET内部版本会改变每个版本的GetHashCode的行为,这样就没有人会对它感到太满意了.

说完这一切之后,我正在调试大量使用GetHashCode的复杂代码.我知道这个bug是我自己做的,与GetHashCode无关,但每次运行它都会失败.很烦人.有没有办法强制GetHashCode像在.NET中一样(我在调试时),而不必编写自己的哈希函数,并且必须在代码中的任何地方替换它?

.net-core

11
推荐指数
2
解决办法
1583
查看次数

有没有办法在protobuf-net代理类中定义替代转换函数(从/到接口)

使用protobuf-net v2 build 668,我正在尝试序列化/反序列化一个类,该类包含一个定义为接口的成员,同时进行即时转换.通常,代理方法可以正常工作,但由于C#不允许用户定义的接口转换,我无法定义转换.

谢谢,

namespace ProtoBufNetTest
{
    using System.Diagnostics;
    using System.IO;

    using ProtoBuf;
    using ProtoBuf.Meta;

    class Program
    {
        static void Main()
        {
            RuntimeTypeModel.Default.Add(typeof(IDummy), false)
                .SetSurrogate(typeof(DummySurrogate));

            var container = new Container { Data = new Dummy { Positive = 3 } };

            using (var file = File.Create("test.bin"))
            {
                Serializer.Serialize(file, container);
            }

            using (var file = File.OpenRead("test.bin"))
            {
                container = Serializer.Deserialize<Container>(file);
                Debug.Assert(container.Data.Positive == 3);
            }
       }
    }

    // Outside of the project, cannot be changed
    public interface IDummy
    {
        int Positive …
Run Code Online (Sandbox Code Playgroud)

c# protobuf-net

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

如何告诉 Golang Gob 编码可以序列化包含没有导出字段的结构的结构

我相信这是 Gob 序列化的合法用例。但enc.Encode由于Something没有导出字段而返回错误。请注意,我不是Something直接序列化,而是仅Composed包含导出的字段。

我发现的唯一解决方法是将Dummy(导出的)值添加到Something. 这是丑陋的。有没有更优雅的解决方案?

https://play.golang.org/p/0pL6BfBb78m

package main

import (
    "bytes"
    "encoding/gob"
)

type Something struct {
    temp int
}

func (*Something) DoSomething() {}

type Composed struct {
    Something
    DataToSerialize int
}

func main() {
    enc := gob.NewEncoder(&bytes.Buffer{})
    err := enc.Encode(Composed{})
    if err != nil {
        panic(err)
    }
}
Run Code Online (Sandbox Code Playgroud)

go gob

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

强制 Go 类型实现接口

在Go中,你不\xe2\x80\x99t声明你需要实现一个接口,你只需执行它(它\xe2\x80\x99s称为\xe2\x80\x98结构类型\xe2\x80\x99类似于\xe2 \x80\x98duck 在动态语言中输入 \xe2\x80\x99)。\n如果你想强制一个类型实现一个接口(比如当你 \xe2\x80\x98inherit\xe2\x80\x99 C# 中的接口或例如Java)?换句话说,如果忘记实现接口(或签名错误)是一个错误,并且您希望尽早发现该错误,该怎么办?最好的方法是什么?

\n

go

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

标签 统计

go ×2

.net-core ×1

c# ×1

gob ×1

protobuf-net ×1