“不包含定义...并没有扩展方法...”错误(“does not contain a definit

2019-06-24 05:55发布

我有一个问题,即我不能使用,因为这个错误的对象的方法:

不包含定义...并没有扩展方法...

这是这个非常相关的问题 。 我在做什么是作为在这一问题的答案,但我仍然得到这个错误。

namespace MyProject.ViewModel
{
    public class NetworkHealthViewModel : ViewModelBase
    {
        private IDataService _dataService;
        public ObservableCollection<NetworkBandwidthModel> NbicNetworkBandwidth
        public ObservableCollection<NetworkPortalStatusModel> NbicNetworkPortalStatus

        public NetworkHealthViewModel()
        {
            _dataService = new DataServiceNetworkHealth();
            NbicNetworkBandwidth       = new ObservableCollection<NetworkBandwidthModel>();
            NbicNetworkPortalStatus    = new ObservableCollection<NetworkPortalStatusModel>();
            _dataService.LoadChartItems(NetworkBandwidthLoaded, NetworkBandwidthLoadedFailed);
            _dataService.LoadPortalStatus(NetworkPortalStatusLoaded, NetworkPortalStatusLoadedFailed);
         }

错误在于在LoadPortalStatus()。 LoadChartItems()的罚款。 NetworkBandwidthLoaded和NetworkPortalStatusLoaded是代表。

NetworkPortalStatusLoaded是奠定了几乎一样的NetworkBandwidthLoaded:

private void NetworkPortalStatusLoaded(IEnumerable<ChartModel> portalStatItems) 
{
    NbicNetworkPortalStatus.Clear();

    var networkPortalItems = from item in portalStatItems
                             where ((NetworkPortalStatusModel)item).Unit == "Portal"
                             select item;

    foreach (var item in networkPortalItems)
    {
        NbicNetworkPortalStatus.Add((NetworkPortalStatusModel)item);
    }

    Message = "Network Portal details loaded";
}

我DataServiceNetworkHealth类被定义为:

namespace MyProject.DataServices
{
    public class DataServiceNetworkHealth : IDataService
    {
        private Action<IEnumerable<ChartModel>> _delagateSuccess;
        private Action<Exception> _delagateFail;
        private String _portalHtmlResponse;

        public void LoadChartItems(Action<IEnumerable<ChartModel>> success, Action<Exception> fail)
        {
          ....
        }

        public void LoadPortalStatus(Action<IEnumerable<ChartModel>> success, Action<Exception> fail)
        {
          ....
        }
    }
}

方法LoadChartItems()在接口IDataService定义,但是LoadPortalStatus不是。 也许这就是问题所在。 有迹象表明,不使用其他LoadPortalStatus类DataServiceX。

我知道这是一个很长的帖子,但我认为更好的让所有的信息在前面。 :-) 谢谢你的帮助!

Answer 1:

您对参考_dataService是该类型IDataService ,这意味着只能通过该接口(或用于所述interfae扩展方法)中所定义的访问成员。 你提到LoadPortalStatus不是接口的一部分,因此你无法通过访问_dataService参考。

基于评论更新:让我们来看看另一个例子。 如果你定义一个List<int>这样的参考:

List<int> i = new List<int>();

可以访问所有的成员List<T>()和所有成员Object 。 但是,如果你改变了参考

IEnumerable<int> i = new List<int>();

通过只访问成员iGetEnumerator其上定义IEnumerable<T>和成员从继承Object

如果包含了System.Linq命名空间,你还可以访问的定义的众多扩展方法IEnumerable<T>

静态类型的i确定哪些成员可通过该引用。



Answer 2:

如果LoadPortalStatus不在界面(或该接口上的扩展方法)可用的,则它不能被从接口的实例调用。

既然你定义:

private IDataService _dataService;

这意味着,你只能访问东西_dataService在声明IDataService (或扩展方法)接口,不管是什么接口的实现。

所以,你的选择是:

1)使_dataService变量,一个类型LoadPortalStatus限定。 2)添加LoadPortalStatusIDataService接口。 3)创建的扩展方法用于IDataService称为LoadPortalStatus

任何那些将工作,虽然1或2很可能是可取的,在我看来。



Answer 3:

原谅我,如果我是愚蠢的,但它看起来像你没有LoadPortalStatus()方法。 你有2×LoadChartItems()但是。

复制粘贴错误?

任何机会,你也可以张贴接口代码?



Answer 4:

这可能是过于明显,但可能你会得到这个错误,因为你实际上并没有一个LoadPortalStatus在你的代码的方法?

您有多个LoadChartItems具有相同签名的方法-是有可能,这些都应该是LoadPortalStatus()方法?

public void LoadChartItems(Action<IEnumerable<ChartModel>> success, Action<Exception> fail)
{
    ....
}

//Same signature as above - is this supposed to implement LoadPortalStatus??
public void LoadChartItems(Action<IEnumerable<ChartModel>> success, Action<Exception> fail)
{
    ....
}


文章来源: “does not contain a definition…and no extension method..” error