如何转换两个类的泛型?

法莎(Farshad Shahsavari)

我有两个类PostSM和Post和一个BaseService类。我的BaseService类是一个通用类,并获得两种类型的类TEntity和TServiceModel。此类将TServiceModel转换为TEntity并将其保存在数据库中。我的问题是如何将TServiceModel转换为TEntity。我明确地将Post转换为PostSM,将PostSM转换为Post int PostSM类。

public class PostSM
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Body { get; set; }
    public RowVersion string { get; set; }
    
    public static explicit operator PostSM(Post post)
    {
        if (post == null)
            return null;
        else
        {
            PostSM postSM = new PostSM()
            {
                Id = post.Id,
                Title = post.Title,
                Body = post.Body,
                RowVersion = post.RowVersion
            };

            return postSM;
        }
    }

    public static explicit operator Post(PostSM postSM)
    {
        if (postSM == null)
            return null;
        else
        {
            Post post = new Post()
            {
                Id = postSM.Id,
                Title = postSM.Title,
                Body = postSM.Body,
                RowVersion = postSM.RowVersion
            };

            return post;
        }
    }
}


public class Post
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Body { get; set; }
    public string RowVersion { get; set; }
}

我有一个名为BaseService的类

public class BaseService<TServiceModel, TEntity>
    where TEntity : class
    where TServiceModel : class
{
    public virtual TServiceModel Add(TServiceModel serviceModel)
    {
        try
        {
            TEntity entity = (TEntity)serviceModel;
            //var addedEntity = repo.Add(entity);
            //uow.SaveChanges();

            return serviceModel;
        }
        catch (Exception)
        {
            throw;
        }
    }   
}

正如我在第一个问题中提到的那样,在BaseService类的Add Method中,我需要将PostSM转换为Post,但是由于BaseService是泛型类,因此我不知道该怎么做。

TEntity entity = (TEntity)servieMoel;

在我的Add方法中,此行出现错误。

霍尔格

实际上,您无法执行此操作,关于通用类型TEntity和TServiceModel的信息一无所知,因此除赋值外没有其他操作。

您应该为TServiceModel使用接口而不是运算符。喜欢

interface IConvert<TTo>
{
     TTo Convert()
}

在您的班级PostSM中实现此接口

class PostSM : IConvert<Post>
{
    public Post Convert() => (Post)this;
    // or put your explicit operator code here
}

最后对您的实现施加约束

public class BaseService<TServiceModel, TEntity>
        where TEntity : class
        where TServiceModel : class, IConvert<TEntity>

这将使您可以致电

TEntity entity = serviceModel.Convert();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有两个参数的泛型类

语言:如何使用泛型将抽象类扩展到两个级别

如何使用两个泛型获取参数化类型的类实例

如何在C#泛型类中将两个可能的类型传递给T?

从另外两个泛型创建泛型

C#如何对具有泛型类型的两个类使用一种方法?

使用双泛型的C#类:当两个泛型相同时,仅给出一个?

继承两个泛型类型

Kotlin 中具有两个类型参数的泛型类

如何将泛型与两个不同的类一起使用,但其中一个来自VCL

如何编写一个特征绑定以添加两个泛型类型的引用?

Java 泛型:如何扩展另一个泛型类的泛型类

java泛型两个左侧参数如何解释

如何在Arrow函数中使用Typescript泛型添加两个参数

如何将两个打字稿泛型联系在一起

如何检查两个结构在Swift中是否具有相同的泛型参数类型?

打字稿如何测试两个泛型是否等效?

如何从 django 中的一个泛型类传递两种形式

实现两个接口所需的泛型

混合两个泛型列表Java

传递两个泛型作为函数参数

Promise 的这两个泛型语法是否相同?

强制两个泛型在 impl 中相同

具有两个泛型参数的C#中的泛型方法

Java泛型与两个泛型超类型的混淆

使用泛型减少重复代码 - 接受两个泛型参数的方法

泛型类型限制受其他两个泛型类型的约束

如何判断两个模板类是否为同一类型

如何使用 linq c# 或内部泛型方法为任何一个或两个 prop 赋值?