7
votes

Impossible de convertir le groupe de méthodes 'Lire' au type de type non délégué 'Bool'

J'essaie d'utiliser sqldatreader pour vérifier si une entrée existe. S'il existe, il retournera l'identifiant, sinon cela reviendra de faux. Lorsque j'essaie de compiler, je reçois l'erreur "Impossible de convertir le groupe de méthodes" Lire "au type" Bool "non délégué. J'ai suivi un exemple que j'ai trouvé dans VB, mais il semble que la traduction peut ne pas être correcte. xxx


1 commentaires

Vous fermez des questions pour être trop vague ou trop ouverte mais aussi pour être trop localisée? Pourquoi ce serait-il un problème? Vous cherchez à résoudre ce problème m'a atterri sur cette question et cela m'a aidé.


4 Réponses :


3
votes
if (rdr.Read())
{
    strReturn = rdr["ID"].ToString();
}

4 commentaires

Lire est une méthode dans la classe SQLDatreader, qui, dans ce cas, ne prend pas de paramètres


@Jhonny en C #, les invocations de méthodes nécessitent toujours parenthèses , même quand ils ne prennent aucun paramètres


Merci pour l'aide, maintenant que je le vois, cela a un sens complet


Oui, mais il a clairement indiqué que cet extrait de code était une traduction de VB. Je pensais que ce serait une bonne idée de se développer un peu sur l'explication, pas seulement sur le doigt sur l'erreur, car le compilateur a déjà fait que



27
votes

Lorsque vous voyez la phrase «Méthode Group» dans une erreur C #, une explication à considérer est que vous avez omis les parenthèses () à partir d'une méthode qui ne prend aucun argument. Dans ce cas, la méthode est lue sur votre DataReader .

Lorsque le compilateur voit lire (sans parenthèses), il pense que vous parlez de la méthode elle-même, comme si vous essayez de l'attribuer à un délégué, par exemple. Alors que ce que vous voulez réellement faire, c'est invoquer la méthode - pour le faire, dans C #, vous devez donner la liste des arguments (dans ce cas échéant), donc: Lire () .


0 commentaires

3
votes

L'invocation de méthode () pour la méthode des méthodes sans paramétrage n'est pas facultative en C #. Sans les parenthèses, l'expression identifie la méthode (groupe) et non sa valeur de résultat. Ce comportement rend la grammaire beaucoup moins ambiguë, en particulier pour des méthodes qui renvoient des délégués.

La première réaction d'un programmeur C # lorsqu'il voit "Impossible de convertir le groupe de méthodes" "au type non délégué" ... "est généralement" Oh j'ai oublié mon () d'invocation ".


0 commentaires

1
votes

Voir votre source, je vous recommande vivement d'utiliser l'instruction Utilisation de la SQLConnection et de la SQLDatreader.

Si vous ne fermez pas le lecteur, le moment de la garbagécollection décidera lorsque le lecteur finalise. Vous pouvez apporter SQLServer lorsque vous ne le savez pas.


0 commentaires