J'ai un problème avec les contrats de code et linq. J'ai réussi à limiter le problème à l'exemple de code suivant. Et maintenant je suis coincé.Comment éviter Linq chaining pour retourner null?
public void SomeMethod()
{
var list = new List<Question>();
if (list.Take(5) == null) { }
// resharper hints that condition can never be true
if (list.ForPerson(12) == null) { }
// resharper does not hint that condition can never be true
}
public static IQueryable<Question> ForPerson(this IQueryable<Question> source, int personId)
{
if(source == null) throw new ArgumentNullException();
return from q in source
where q.PersonId == personId
select q;
}
Quel est le problème avec ma chaîne linq? Pourquoi ne pas se plaindre lors de l'analyse de l'appel ForPerson?
EDIT: le type de retour pour la méthode ForPerson a changé de chaîne en IQueryable, ce que je voulais dire. (ma mauvaise)
Merci pour votre réponse rapide. Le type de retour aurait dû être IQueryable. J'ai changé cela dans ma question. Le problème est que les resharpers ne se plaignent pas. Ca devrait parce que ForPeson ne retournera jamais null. –
Florian
Merci pour ça. +1 –
En fait, je crois comprendre que ReSharper a inversé les diverses méthodes, et ensuite les codes durs les valeurs déterminées par l'ingénierie inverse. Le résultat est qu'il arrive parfois à de fausses conclusions, comme cela 'XmlReader.Create' peut retourner null. Il y a un cas de bord très obscur où il pourrait. –