如何解决隐式转换不适用于列表C#
以下面的示例为例:
public interface IModel
{
public string FirstPropery { get; set; }
}
public class Model : IModel
{
public string FirstPropery { get; set; }
}
public List<Model> GetActualModels()
{
var models = new List<Model>();
models.Add(new Model
{
FirstPropery = "1"
});
models.Add(new Model
{
FirstPropery = "2"
});
return models;
}
public List<IModel> GetModels()
{
return GetActualModels();
}
这无法编译,我们在GetModels()上出错
"Error CS0029 Cannot implicitly convert type 'System.Collections.Generic.List<ConsoleApp1.Model>' to 'System.Collections.Generic.List<ConsoleApp1.IModel>'"
然后,如果我们仅将功能更改为:
public List<IModel> GetModels()
{
var models = GetActualModels();
var modelsInterface = new List<IModel>();
modelsInterface.AddRange(models);
return modelsInterface;
}
这不会引发任何编译错误。这个问题必须回答很多次,但是我不知道如何寻找答案。知道为什么这种奇怪的行为吗?
解决方法
您可以将函数稍微更改为Cast
,如下所示:
public static List<IModel> GetModels()
{
return GetActualModels().Cast<IModel>().ToList();
}
将IEnumerable的元素转换为指定的类型。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。