C# 泛型 - 约束泛型方法参数具有特定的静态方法

问题描述 投票:0回答:1

我正在使用自动生成的代码类,其中每个类

Foo
都有一个等效的
FooSerializer
类,具有静态
Serialize(Foo data)
方法。

我想编写一个辅助函数,它可以通过接收两个类型参数来为任何此类类执行 Serialize 方法(+一堆其他东西)。

public void Serialize<Foo, FooSerializer>(Foo data)
{
  FooSerializer.Serialize(data);
}

但是这是行不通的,因为它不知道

FooSerializer
Serialize
方法,并且
FooSerializer
不派生自任何基于
Foo
定义该方法的通用接口。

有没有办法在通用约束中指定

FooSerializer
必须有一个接收
Serialize
类型参数的
Foo
方法?

在 C++ 中,我通过简单地将

Foo
FooSerializer
作为模板参数来实现这一点。不知道c#中是否有类似的解决方案。

c# generics
1个回答
0
投票

在现代运行时(不是 .NET Framework 等),是的:

interface IFooSerializer<T>
{
    // pick your own API here; string, byte[], Stream, etc
    static abstract T Read(string value);
    static abstract string Write(T value);
}

class Consumer
{
    public void Serialize<Foo, FooSerializer>(Foo data)
        where FooSerializer : IFooSerializer<Foo>
    {
        var s = FooSerializer.Write(data);
        var clone = FooSerializer.Read(s);
    }
}

但是,仅使用实例序列化程序可能会更容易。

© www.soinside.com 2019 - 2024. All rights reserved.