C#: miért nem működik a bool metódusom?
Van egy static void bool metódus a programomban ami meg van hívva a main-be, és annyit szeretnék hogy egy bool értékét visszaadja a return.
Azonban ha a metóduson belül true érték lesz a return, a main-ben ugyanúgy false marad.
Megpróbálom felvázolni a programomból a lényeget:
public static void Main (...)
{
bool x = false;
Valami(x);
}
static void Valami (bool y)
{
BlaBlaBla
return y;
}
Honnan derül ki, hogy a meghívott metódus milyen értéket ad vissza? Csak mert annyit látok, hogy meghívod, és kész.
Egyébként, ha jól értem, pont a lényeg marad ki, mert a "BlaBlaBla" fedné le, mi történik az átadott paraméterrel.
Ha vissza akarod adni az értéket akkor pl így:
public static void Main(string[] args)
{
bool x=false;
Console.WriteLine(x);
x=Valami(x);
Console.WriteLine(x);
}
static bool Valami (bool y)
{
y=true;
return y;
}
Mivel hiába adod vissza, az nem ugyanaz lesz.
Függvényhívásnál csinálsz egy másolatot belőle, és a másolaton fog dolgozni a Valami függvényed.
Az eredeti persze hogy ugyanúgy marad.
#5: igen, én is erre gondoltam, bár elsőre megzavart, amit #3 alatt írta, mert azt hittem elsőre, hogy a függvény-hívást írta be a Console.WriteLine-ba.
Kérdező: alapvetően azt kell megérteni, hogy a a "return" kulcsszó visszad egy értéket, vagyis a függvénnyel értéket adsz. Ez kimarad.
Ha a referenciáját adnád át a változónak, és így módosítanád magát a változót, az ok, de akkor a returnnek nem sok értelme ebben a kontextusban.
#6 valami ilyesmi kezdett kirajzolódni nálam csak nem tudtam teljesen összerakni, köszi!
Tehát vagy ref-el hozom létre ezt a boolt, vagy függvénnyel adok egy értéket.
Amúgy az is oké hogy azért nem működik mert egy másolatot használ a metódus, viszont azt furcsállom hogy más értékkel ez működik. Például egy Main-ben lévő tömbbe be tud tenni egy stringet (amit a metódus kér be a konzolról), és az a helyén is marad.
"Például egy Main-ben lévő tömbbe be tud tenni egy stringet"
"Array types are reference types derived from the abstract base type Array."
Tehát ha tömböt adsz át paraméterként, akkor valójában annak referenciáját adod át. Így értelemszerűen az eredeti tömböt módosítod-
De azért javaslom, hogy a rendelkezésdere álló tananyagot olvasd el, mert sok nyelv közül nem a C#-ban vagyok a legerősebb.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!