无法将dto列表转换为动态列表

时间:2017-01-16 02:14:49

标签: c#

我该如何使其发挥作用?它给我一个错误不能(?<=_).*。我的WebApp上有很多DTO,我需要一个占位符变量。

注意:这不是我的WebApp上的实际代码,这与我想要做的事情完全相同。

implicitly convert

3 个答案:

答案 0 :(得分:1)

您可以使用Cast方法将其明确地投射到dynamic,如下所示:

if(serviceType == "1")
        entities = DTO1Service.GetListOfDTO1().Cast<dynamic>().ToList();
else if (serviceType == "2")
        entities = DTO2Service.GetListOfDTO2().Cast<dynamic>().ToList();

答案 1 :(得分:1)

你错了。您正尝试将dynamic分配给List<dynamic>而不是列表成员

您可以创建新实例并传递

中的值
if(serviceType == "1")
    entities = new List<dynamic>(DTO1Service.GetListOfDTO1());
else if (serviceType == "2")
    entities = new List<dynamic>(DTO2Service.GetListOfDTO2());

或只填充最初创建的实例

if(serviceType == "1")
    entities.AddRange(DTO1Service.GetListOfDTO1());
else if (serviceType == "2")
    entities.AddRange(DTO2Service.GetListOfDTO2());

我个人更喜欢第二个选项,因为你已经初始化了变量,只是填充它而不是创建一个实例只是为了重新分配它。

答案 2 :(得分:0)

基于对该问题的评论,我认为OP需要类似的东西:

public interface IAmDTO {

    int Id { get; set; }

    string Name { get; set; }
}

public class DTO1 : IAmDTO {

    public int Id { get; set; }

    public string Name { get; set; }
}

public class DTO2 : IAmDTO {

    public int Id { get; set; }

    public string Name { get; set; }
}

public class DTO1Service {

    public static List<DTO1> GetListOfDTO1() =>
        new List<DTO1>
        {
        new DTO1 { Id = 1, Name = "DTO 1" },
        new DTO1 { Id = 2, Name = "DTO 2" },
        };
}

public class DTO2Service {

    public static List<DTO2> GetListOfDTO2() =>
        new List<DTO2>
        {
        new DTO2 { Id = 1, Name = "DTO 1" },
        new DTO2 { Id = 2, Name = "DTO 2" },
        };
}
}

public static class DTOExtensions {

public static void DtoHelper(this IEnumerable<IAmDTO> dtoS) {
    foreach(var dto in dtoS) {
        //DO SOMETHING WITH
        var id = dto.Id;
        var name = dto.Name;
    }

}

}