0

私のプロジェクトは、.Net 4.5 を使用する VS2012 にあります。

クラスに次のオーバーロードされたメソッドがあります。

public SalesOrder GetSalesOrder(int salesOrderID, bool forceRefresh = false)
{
    using (iSeriesUOW uow = new iSeriesUOW())
    {
        return GetSalesOrder(uow, salesOrderID, forceRefresh);
    }
}

public SalesOrder GetSalesOrder(iSeriesUOW uow, int salesOrderID, bool forceRefresh = false)
{
    .... do some stuff here
}

次を使用して最初のメソッドを呼び出そうとしています:

public void PopulateModel(string companyCode, int salesOrderID, bool forceRefresh)
{
    SalesOrders blSalesOrders = new SalesOrders(companyCode);
    SalesOrder salesOrder = blSalesOrders.GetSalesOrder(salesOrderID, forceRefresh);

    ... Other code here
}

GetSalesOrder の呼び出しでコンパイラからエラーが表示されます。

The type 'DataAccess.iSeriesUOW' is defined in an assembly that is not referenced. You must add a reference to assembly 'Viper.DataAccess, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.  

GetSalesOrder で forceRefresh を削除すると、正常にコンパイルされます。

2 番目の GetSalesOrder オーバーロードを呼び出そうとしていると思いますが、(int, bool) の署名が明確にあるため理由はわかりません。

何か案は?

4

3 に答える 3

4

2 番目の GetSalesOrder オーバーロードを呼び出そうとしていると思いますが、(int, bool) の署名が明確に存在するため理由はわかりません。

それは本当に明らかですか?int から iSeriesUOW への暗黙的な変換がないことをどのように知ることができますか?

C# コンパイラに期待しすぎています。明らかに適用できない、または適用可能だが明らかに悪いメソッドのメタデータがディスクから読み込まれないように、過負荷解決アルゴリズムに巧妙な「早期アウト」を組み込むことに時間をかけませんでした。

C# コンパイラは、プログラムの完全な分析を実行できるように、コンパイル時にアセンブリ参照の推移的なクロージャ全体を要求する権利を留保します。推移閉包全体を提供しないことで誤って回避できる限られたシナリオがいくつかありますが、それを信頼することはできません。また、Roslyn では、これらのシナリオの一部で参照されるアセンブリがさらに必要になる可能性があります

アセンブリ参照の推移的なクロージャをコンパイラに提供する習慣を身に付ける必要があります。

于 2013-03-28T19:20:36.683 に答える
3

パラメータ値を明示的に設定しようとします:

それ以外の

 SalesOrder salesOrder = blSalesOrders.GetSalesOrder(salesOrderID, forceRefresh);

やってみます

public void PopulateModel(string companyCode, int salesOrderID, bool forceRefreshParam)
{
    SalesOrders blSalesOrders = new SalesOrders(companyCode);
    SalesOrder salesOrder = blSalesOrders.GetSalesOrder(salesOrderID, forceRefresh:forceRefreshParam);

    ... Other code here
}
于 2013-03-28T19:03:35.987 に答える
2

クラス iSeriesUOW はどこで定義されていますか? それが言うように、アセンブリ Viper.DataAccess への参照を追加してみてください。

于 2013-03-28T19:05:20.050 に答える