2011-07-04 19 views
1

を呼び出すときに、私はこのコードをしたパラメータについて警告(非常にストリップダウン): CodeContracts:コード契約オーバーロードされたメソッド

[ContractClass(typeof (QueryServiceContract))] 
public interface IQueryService 
{ 
    IEnumerable<Document> ExecuteQuery(IMultiIndexQuery multiIndexQuery); 

    IEnumerable<T> ExecuteQuery<T>(IMultiIndexQuery multiIndexQuery) where T : class; 
} 

[ContractClassFor(typeof (IQueryService))] 
public abstract class QueryServiceContract : IQueryService 
{ 
    public IEnumerable<Document> ExecuteQuery(IMultiIndexQuery multiIndexQuery) 
    { 
     Contract.Requires(multiIndexQuery != null); 
     Contract.Ensures(Contract.Result<IEnumerable<Document>>() != null); 
     return null; 
    } 

    public IEnumerable<T> ExecuteQuery<T>(IMultiIndexQuery multiIndexQuery) where T : class 
    { 
     Contract.Requires(multiIndexQuery != null); 
     Contract.Ensures(Contract.Result<IEnumerable<T>>() != null); 
     return null; 
    } 
} 

public class QueryService : IQueryService 
{ 
    public IEnumerable<Document> ExecuteQuery(IMultiIndexQuery multiIndexQuery) 
    { 
     throw new NotImplementedException(); 
    } 

    public IEnumerable<T> ExecuteQuery<T>(IMultiIndexQuery multiIndexQuery) where T : class 
    { 
     ExecuteQuery(multiIndexQuery); // This is the row code contracts complain about. 
     throw new NotImplementedException(); 
    } 
} 

public class Document 
{ 
} 

public interface IMultiIndexQuery 
{ 
} 

コード契約が私にこの警告を与える証明されていないが必要です!multiIndexQuery = nullを

なぜ私はその警告を受け取るのですか? QueryServiceContractは、そのパラメータがnullでない契約を設定しています。呼び出す方法と呼び出された方法の両方で...

答えて

1

このコードを読んでいるうちに私は迷子になりました...
無制限の再帰には進まないのですか?

IEnumerable<Document> ExecuteQuery2(IMultiIndexQuery multiIndexQuery); 

、それはチェッカーを満たす:私は(いくつかの場所で)のexecuteQuery()オーバーロードの1と改名試験として

おそらく、アナライザの弱点を発見しましたが、報告する前にコードが期待どおりに機能することを確認します。

+0

これは無制限の再帰ではありません。 ExecuteQueryをジェネリックパラメータなしで呼び出す方法はありません。その型情報を持つパラメータはありません。 私はこれに関するバグを報告しました:https://connect.microsoft.com/VisualStudio/feedback/details/678828/code-contracts-warns-about-parameter-when-calling-overloaded-method – Allrameest

関連する問題