从泛型方法返回派生对象

问题描述

我想创建一个可以返回类中定义的泛型类型的方法,这里有一个详细的例子;

https://dotnetfiddle.net/SApVp3

using System;
                    
public class Program
{
    public static void Main()
    {
        // This would be some string imported from a CSV file   
        var customerData = "Customer,1,Ford";       
        var personData = "Person,675,Henry,Ford";
        
        var customerImporter = new ImportData<CompanyMaster>();
        customerImporter.ImportDataFromFile(customerData);
                                      
        var personImporter = new ImportData<PersonMaster>();
        personImporter.ImportDataFromFile(personData);
    }
}

public class GenericRepository<TBase> 
    where TBase : EntityBase
{
    public void Insert(TBase entity)
    {
        //.. generic Insert to database
    }
}

public class ImportData<TBase>  
    where TBase : EntityBase
{
    GenericRepository<TBase> _genericRepository;
    
    //ctor
    public void ImportDataFromFile(string data)
    {
        // convert the string data to TBase
        _genericRepository = new GenericRepository<TBase>();
    }
}

public class CsvConverter<TBase> where TBase: EntityBase{
    
    public TBase ConvertTo(string someString)
    {
        if (someString.StartsWith("Customer"))
        {
            return GetCompany(someString);
        } 
        
        else return GetPerson(someString);
    }
    
    private CompanyMaster GetCompany(string companyString){
        return new CompanyMaster();
    }
    
    private PersonMaster GetPerson(string companyString){
        return new PersonMaster();
    }

}


public abstract class EntityBase
{
    public int Id { get; set; }
    public DateTime CreatedDate { get; set; }
}

public class CompanyMaster : EntityBase
{
    public string CompanyName { get; set; }
}

public class PersonMaster : EntityBase
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

当前抛出;

编译错误(第 47 行,第 11 栏):无法将类型“CompanyMaster”隐式转换为“TBase” 编译错误(第 50 行,第 15 行):无法将类型“PersonMaster”隐式转换为“TBase”

这能起作用吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)