このタイプの質問に対する他の回答の一部を読んだ後、私はまだ警告が残っています。このスニペットで私は自分のデータベースからUserActivationを取得します。この時点までに、少なくとも1つのUserActivationが常に存在します。それ以上のものが1つあれば、すべての洋梨の形になっています...私は、証明されていないソースに関する警告をどのようにスケルチするのかについて、いくつかの指示に従っていますが、役に立たないものです。警告:警告83 CodeContracts:unproven:source!= null 161行目で、特定の行の下のメソッドを参照してください。コード契約:証明されていないソースが必要です!= null
これは、ここで要求されたとして、私は、CCのバージョン1.4.40602.0を使用しています方法
private static UserActivation GetUserActivation(Guid userId)
{
UserActivations userActivations = UserActivation.GetUserActivationsByUser(userId: userId);
Contract.Assume(userActivations != null);
if (userActivations.Count() > 1) // Line Number 161
throw new Exception("More then one user action found in database");
return userActivations[0];
}
がUserActivations宣言です。
Public static UserActivations GetUserActivationsByUser(User user = null, Guid userId = new Guid())
{
Guid id = new Guid();
if (user != null)
id = user.Id;
else
if (userId != Guid.Empty)
id = userId;
else
throw new Exception("Either user or userId must have a value");
UserActivations uas = new UserActivations(StorageManager.SelectAll(
Criteria.And(
Criteria.EqualTo("UserId", id),
Criteria.EqualTo("Deleted", false))));
Contract.Ensures(Contract.Result<UserActivations>() != null);
return uas;
}
リネオは本当ですか?私は 'userActivations [0];'が(別の)警告を飛ばしてしまうと思います。 'Count()'の署名はどういうものですか? Countプロパティはありませんか? –
私はuserActivations [0]ではない行番号について確信しています。そうすれば、ideが信じるでしょう。 Count()シグネチャは単純にIEnumerable Count()です。public static int Count(このIEnumerable ソース)。 –
Siegeon
@HenkHolterman LINQ演算子、int System.Linq.Enumerable.Count(IEnumerable ソース) 'である必要があります。私はそれが 'require(source!= null)'を持っていると信じています。しかし、なぜそれが証明できないのか分かりません。仮定があります。 –