gpt4 book ai didi

c# - 确定类型等价

转载 作者:太空狗 更新时间:2023-10-29 20:36:55 24 4
gpt4 key购买 nike

是否有可能在 C# 中(我使用的是 .Net 4.5,但更普遍地询问)来确定泛型类型的两个实现是否在功能上等效?

作为需求的一个例子,假设我有一个 IMapper 接口(interface)定义为:

public interface IMapper<TTo, TFrom>
{
TTo MapFrom(TFrom obj);
TFrom MapFrom(TTo obj);
}

我的理想实现是:

public class MyMapper : IMapper <A, B>
{
A MapFrom(B obj) {...}
B MapFrom(A obj) {...}
}

这将在功能上等同于:

public class MyEquivalentMapper : IMapper <B, A>
{
B MapFrom(A obj) {...}
A MapFrom(B obj) {...}
}

但是编译器(正确地)将它们识别为不同的类型。有没有一种方法可以告诉编译器将这两种类型视为等同的(甚至可能可以互换)?

我也看过这个:

public interface ISingleMapper<out TTo, in TFrom>
{
TTo MapFrom(TFrom obj);
}
public class MyAlternateMapper :
ISingleMapper<A, B>,
ISingleMapper<B, A>
{
A MapFrom(B obj) {...}
B MapFrom(A obj) {...}
}

但我发现我无法正确识别抽象,因此我可以在不创建“中间人”接口(interface)的情况下注入(inject)(到构造函数等)具体类:

public interface IBidirectionalMapper<TTo, TFrom> :
ISingleMapper<TTo, TFrom>,
ISingleMapper<TFrom, TTo>
{
TTo MapFrom(TFrom obj);
TFrom MapFrom(TTo obj);
}
public class MyAlternateMapper : IBidirectionalMapper<A, B>
{
A MapFrom(B obj) {...}
B MapFrom(A obj) {...}
}

我认为“中间人”方法更“正确”,但我不想创建多余的类型。此外,它仍然存在交换类型参数会创建两个不同但功能相同的类型的问题。

有没有更好的方法来实现我的目标?

最佳答案

您可以有一个映射器来执行两种翻译,但只是让它定向,因为在您的情况下,始终存在“我的对象”和“数据库对象”配对。

interface IDbTypeModel<T, TDb>
{
T FromDb(TDb dbObj);
TDb ToDb(T obj);
}

关于c# - 确定类型等价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15006704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com