4

このエラーのためにobjectsメソッドを使用できないという問題があります。

定義が含まれていません...そして拡張メソッドがありません...

それはこの質問に非常に関連しています。私はその質問の答えとして与えられていることをしていますが、それでもこのエラーが発生します。

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クラスがあります。

これは長い投稿であることは知っていますが、すべての情報を前もって提供したほうがいいと思いました。:-)助けてくれてありがとう!

4

4 に答える 4

2

への参照_dataServiceはタイプIDataServiceです。これは、このインターフェース(または前述のインターフェースの拡張メソッド)によって定義されたメンバーにのみアクセスできることを意味します。あなたはそれ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、その参照を通じて使用可能なメンバーを決定します。

于 2012-05-08T16:12:36.960 に答える
0

LoadPortalStatusインターフェイス(またはそのインターフェイスの拡張メソッド)で使用できない場合は、インターフェイスのインスタンスから呼び出すことはできません。

あなたが定義するので:

private IDataService _dataService;

これは、そのインターフェースの実装が何であるかに関係なく、(または拡張メソッドとして)インターフェースで_dataService宣言されたものにのみアクセスできることを意味します。IDataService

したがって、選択肢は次のとおりです。

1)_dataService変数をLoadPortalStatus定義済みの型にします。2)インターフェースに追加LoadPortalStatusIDataServiceます。IDataService3)呼び出されたの拡張メソッドを作成しますLoadPortalStatus

私の意見では、これらのいずれも機能しますが、おそらく1つまたは2つが望ましいでしょう。

于 2012-05-08T16:11:56.070 に答える
0

私が愚かであるなら許してください、しかしあなたはLoadPortalStatus()メソッドを持っていないようです。ただし、2 x LoadChartItems()があります。

コピー&ペーストエラー?

インターフェイスコードも投稿できる可能性はありますか?

于 2012-05-08T16:12:13.497 に答える
0

これは非常に明白かもしれませんが、実際にはLoadPortalStatusコードにメソッドがないため、このエラーが発生する可能性がありますか?

LoadChartItems同一のシグネチャを持つ複数のメソッドがあります-これらの1つが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)
{
    ....
}
于 2012-05-08T16:13:32.780 に答える