J'ai le code suivant à l'aide d'un contexte de données normal qui fonctionne bien: Cependant, lorsque je convertit le filtre en une méthode de poste comme suit: P> var dc = new myDataContext();
Contract.Assume(dc.Cars!= null);
var cars = dc.Cars.WithOwner('Jim');
public static IQueryable<Car> WithOwner(this IQueryable<Car> cars, string owner)
{
Contract.Requires(cars != null);
return cars.Where(c => c.Owner == owner);
}
4 Réponses :
Je suppose que votre avertissement est causé par le paramètre propriétaire, plutôt que les voitures. Ajoutez une condition préalable dans la méthode de la clienter pour vérifier si le propriétaire n'est pas NULL.
public static IQueryable<Car> WithOwner(IQueryable<Car> cars, string owner) { Contract.Requires(cars != null); Contract.Requires(!string.isNullOrEmpty(owner)); return cars.Where(c => c.Owner = owner); }
De plus, si vous regardez vos messages, les contrats de code pourraient suggérer cette (ou une autre) condition préalable automatiquement.
Douteux. Il n'y a aucune raison de se plaindre d'un null code> propriétaire. Mon pari est sur
c == null code>, c'est-à-dire qu'il n'est pas garanti que tous les éléments de
voitures code> ne sont pas nuls.
Je me demande comment vous obtenez le code compilé avec la méthode d'extension car vous manquez CE CODE> STROND> Mot clé de votre méthode Signature.
public static IQueryable<Car> WithOwner(this IQueryable<Car> cars, string owner)
{
...
}
Il est possible que votre extrait de code ne décrit pas complètement le code que vous utilisez.
Considérez cet extrait à la place: P>
Contract.Ensures(Contract.Result<IQueryable<Car>>() != null);
Nous avons résolu cela quelques versions de quelques versions. L'avertissement était dû à certains contrats manquants autour de la construction d'expression Linq, etc. Les méthodes d'expression LINQ ont des contrats et le compilateur C # génère un code qui appelle ces méthodes. Si nous n'avons pas assez de conditions de poste sur les méthodes appelées, vous pouvez obtenir ces avertissements cryptiques sur le code que vous ne savez même pas est là (sauf si vous avez l'air avec ildasme). P>