【问题标题】:Cannot implicitly convert type with interface [duplicate]无法使用接口隐式转换类型[重复]
【发布时间】:2014-11-06 06:22:14
【问题描述】:

我正在编写 C# Xamarin 应用程序,并收到以下错误:

Error CS0029: Cannot implicitly convert type 'System.Collections.Generic.List<SimpleMapDemo.AndroidMapLocationImageViewModel>' to 'System.Collections.Generic.List<SimpleMapDemo.AndroidIGridViewItemWithAssets>'

我在这一行收到错误:

return androidMapLocationImageGalleryViewModel.images;

在以下函数中:

public List<AndroidIGridViewItemWithAssets> GetAndroidMapLocationItemGridViewItemsFromWebService(string type, int webServiceId)
{
    if (type.Equals("Image Gallery")) 
    {
        AndroidMapLocationImageGalleryViewModel androidMapLocationImageGalleryViewModel = GetAndroidMapLocationImageGallery (webServiceId);
        return androidMapLocationImageGalleryViewModel.images;
    }
    return null;
}

这是我的AndroidMapLocationImageGalleryViewModel 代码:

public class AndroidMapLocationImageGalleryViewModel
{
    public int mapLocationItemImageGalleryId { get; set; } //may not be needed
    public List<AndroidMapLocationImageViewModel> images;

    public AndroidMapLocationImageGalleryViewModel ()
    {
        images = new List<AndroidMapLocationImageViewModel> ();
    }   
}

AndroidMapLocationImageViewModel 继承自 AndroidIGridViewItemWithAssets

我可以就这段代码寻求帮助吗?

提前致谢

【问题讨论】:

  • 类不是协变的,只有接口。
  • 这是一个重复的,现在正在寻找一个好的候选参考。
  • 可以有其他更好的重复,但有点难找,太笼统的搜索词。

标签: c# list interface return typeconverter


【解决方案1】:

你需要:

return androidMapLocationImageGalleryViewModel.images
    .Cast<AndroidIGridViewItemWithAssets>()
    .ToList();

投射方式:http://msdn.microsoft.com/en-us/library/bb341406(v=vs.110).aspx

【讨论】:

  • 你需要在转换后添加.ToList(),因为.Cast&lt;T&gt;()返回一个IEnumerable&lt;T&gt;而不是一个列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
相关资源
最近更新 更多