自动播放器无法转换为

时间:2017-06-05 12:02:13

标签: c# compiler-errors automapper

我得到"无法转换类型' PlanEntity'到了“TDestination'"在单元测试中模拟我的自动映射器时编译时错误。

public TDestination Map<TSource, TDestination>(TSource source) where TDestination : class
            {
                var value = source as PlanEntity;
                if (value != null)
                {
                    return (TDestination)value;
                }

                return null;

            }

然而,当我映射IEnumerable时它运行得很好。

public TDestination Map<TDestination>(object source) where TDestination : class
            {
                var value = source as IEnumerable<PlanEntity>;

                if (value != null)
                {
                    var results = value.Select(i =>
                        new PlanModel
                        {
                            Id = i.Id,
                            Name = i.Name
                        });

                    return (TDestination)results;
                }

                return null;
            }

我也试过这样做,但它也给出了同样的错误。

public TDestination Map<TSource, TDestination>(TSource source) where TDestination : class
            {
                var value = source as PlanEntity;
                if (value != null)
                {
                    var planModel = new PlanModel
                    {
                        Id = value.Id,
                        Name = value.Name
                    };
                    return (TDestination)planModel;
                }

                return null;

            }

我的mockMapper类中有三个覆盖。

TDestination Map<TSource, TDestination>(TSource source) where TDestination : class;
TDestination Map<TSource, TDestination>(TSource source, TDestination destination) where TDestination : class;
TDestination Map<TDestination>(object source) where TDestination : class;

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

var value = source as PlanEntity正在将来源分配给&#39;值&#39;变量。但是,您稍后会尝试将其强制转换为目标类型 - return (TDestination)value;这些类型会有所不同,从而导致您的错误。

在第一个代码块中,您需要添加以下内容以使其等效于第二个代码块:

var planModel = new PlanModel() { Id = value.Id };
return (TDestination)planModel;