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