【问题标题】:Convert ICollection<Interface> to ICollection<Class> [UWP] c#6.0将 ICollection<Interface> 转换为 ICollection<Class> [UWP] c#6.0
【发布时间】:2017-04-08 16:05:47
【问题描述】:

我知道这已经在堆栈中的很多地方得到了回答,最好的答案是Here。我也试过了,还有很多其他的答案。我有一个库,它返回给我一个接口集合 (IMasterAutoSuggestOutlet)

public interface IMasterAutoSuggestOutlet : IBaseAutoSuggestOutlet
{
    IAddressData AddressData { get; }

    IPlaceActivity PlaceActivity { get; }

    string ELoc { get; }

    Geopoint ExactLocation { get; }

    Geopoint EntranceLocation { get; }

    LocationType TypeOfLocation { get; }
}

现在,我想在我的应用程序中将此界面数据从一个页面传输到另一个页面。由于接口不能被序列化,我创建了一个具体的类来实现这个接口:

我的具体课程,

public class MasterAutoSuggestModel : IMasterAutoSuggestOutlet
{
    public IAddressData AddressData { get; set; }

    public IPlaceActivity PlaceActivity { get; set; }

    public string ELoc { get; set; }

    public Geopoint ExactLocation { get; set; }

    public Geopoint EntranceLocation { get; set; }

    public LocationType TypeOfLocation { get; set; }
}

我想要做的是,将 ICollection 转换为 ICollection。下面的代码显示了我对此类操作的实现:

var collection = mainPageViewModel?.SearchPageVM?.searchManager?.AutoSuggestResponse;
var ob = collection.First();
if (ob is IMasterAutoSuggestOutlet)
{
    var ToBeTransfered = collection.OfType<MasterAutoSuggestModel>();    //Simply returns the collection with a count 0
    var serializedData = JsonConvert.SerializeObject(ToBeTransfered);
    ScenarioFrame.Navigate(typeof(MasterSearchResultPage), serializedData);
}

问题在于var ToBeTransfered = col.OfType&lt;MasterAutoSuggestModel&gt;(); 它返回给我一个计数为 0 的集合,即使 collection 中有 10 个项目。

谁能告诉我哪里出错了?请注意,我需要使用此 Converted 集合进行序列化并作为导航参数发送到下一页

【问题讨论】:

    标签: c# interface uwp


    【解决方案1】:

    ofType 方法按指定的类型过滤连接。如果您从其他库中检索对象,它们将不是那种特定类型。 https://msdn.microsoft.com/en-us/library/bb360913(v=vs.110).aspx

    您可能想要做的是将从库中检索到的项目转换为您的 dto 以进行序列化。您可以使用自动映射器之类的东西进行转换

    if (ob is IMasterAutoSuggestOutlet) {
       var transferObject = new MasterAutoSuggestModel(){
           //Set Properties
        }
       // var ToBeTransfered = collection.OfType<MasterAutoSuggestModel>();    //Simply returns the collection with a count 0
        var serializedData = JsonConvert.SerializeObject(transferObject);
        ScenarioFrame.Navigate(typeof(MasterSearchResultPage), serializedData); }
    

    【讨论】:

    • 我不确定手动设置属性是正确的方法,因为在这种情况下属性要少得多,但是当属性超过 6 个时会发生什么?
    • 这就是 AutoMapper 之类的地方
    • 有什么办法可以安装自动映射器块或导入库并制作地图。我可以做一个明确的演员吗?或者为它写一个扩展方法?
    • 如果您可以访问库中的具体类型,则只能将其转换为具体类型。由于库正在返回一个接口,因此不能进行强制转换,因为实际的实现类型可能会发生变化,因此会破坏您的代码。
    • 好的,你有一个例子说明在这种情况下如何使用 autoMapper 吗?我无法使用自动映射器将接口转换为类。
    猜你喜欢
    • 2011-02-25
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多