Le programme est correct mais il y a une petite erreur. Avant, j'avais publié le même programme avec une erreur différente, mais maintenant il affiche une nouvelle erreur.

using System;
class Methodcalling
{
    public void Values(int num1, int num2)
    {

        if (num1 > num2)
        {
            Console.WriteLine("num2 is large ");
        }
        else
        {
            Console.WriteLine("num1 is big");
        }
    }
    static void Main(string[] args)
    {
        int a, b;
        Methodcalling m = new Methodcalling();


        Console.WriteLine("enter a no.:");
        a = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("enter a no.:");
        b = Convert.ToInt32(Console.ReadLine());

        int result = m.Values(a, b);

    }
}

ERREUR: impossible de convertir implicitement le type «void» en «int»

c#
-4
Siva Teja 25 janv. 2017 à 13:23

5 réponses

Meilleure réponse

Votre méthode Values() a été déclarée comme void - la méthode qui ne renvoie rien.

Ce faisant:

int result = m.Values(a, b);

Vous vous attendez à ce que la méthode renvoie la valeur int.

Donc, vous devriez changer votre code dans Main (appelez simplement votre méthode):

m.Values(a, b); // without int result =

OU

Changez votre méthode pour:

public int Values(int num1, int num2) // int instead of void

Et ajoutez une instruction return pour renvoyer une valeur de cette méthode:

return 0; // your value instead of 0

Dans cette situation, il vaudra mieux ne pas changer la méthode (premier cas dans cette réponse), car vous ne faites aucun calcul et imprimez simplement vers Console. Donc, il n'y a rien à retourner.

2
Roman Doskoch 25 janv. 2017 à 10:47

Dans cette ligne

int result = m.Values(a, b);

Vous appelez la méthode Values qui ne renvoie aucune valeur (void)

public void Values(int num1, int num2)

Vous pouvez simplement appeler une méthode comme celle-ci:

m.Values(a, b);

Ou reconcevez la méthode Values pour renvoyer une valeur.

0
BWA 25 janv. 2017 à 10:28

Vous essayez de n'attribuer rien (void) à un int:

int result = m.Values(a, b);

Vous avez deux options:

Remplacez public void Values(int num1, int num2) par public int Values(int num1, int num2) et renvoyez quelque chose d'utile le cas échéant;

Ou

N'attribuez pas de résultat, appelez simplement m.Values(a, b);

1
Thomas Ayoub 25 janv. 2017 à 10:27

Chaque méthode renvoie une valeur (à l'exception des méthodes void) qui est déclarée dans la signature de votre méthode.

Par exemple:

public int Values(int num1, int num2){
    return num1 + num2;
}

Retourne le type int,

public float Values(int num1, int num2){
    return num1 + num2;
}

Retourne le type float.

Et puis nous avons la méthode void qui ne renvoie rien. Void peut faire beaucoup de choses mais n'a toujours pas de valeur de retour.

Dans int result = m.Values(a, b); vous essayez de forcer votre méthode void à retourner int

0
michalmichalek 25 janv. 2017 à 10:56

Vous essayez de recevoir une valeur de votre méthode m.Values. Mais vous avez déclaré la valeur de retour comme void, ce qui signifie que vous ne voulez pas que votre méthode renvoie une valeur.

Changez votre déclaration de void en int et renvoyez une valeur int selon le cas if

0
haggis 25 janv. 2017 à 10:31