Van erre lehetőség c# -ban? Többi lent.
Van egy függvény pl int típussal, és paramétereket vár.
pl.
public int nev(int a, int b, string s, bool b)
{
...........
return a+b;
}
De nekem kellene a string is visszatérésre, és a bool is.. Akkor? Van erre valami lehetőség?
Mert az ugyebár nem jó ha return s;
Hisz int a függvény típusa. Nem térhet vissza szöveggel.
Alkalmazzak inkább ehelyett konstruktort?
De a konstruktornak lehet típusa? Mert tudtommal az eltérés az egyes konstruktorok között csak a paraméterekben van.
class ez
{
int i;
int u;
public ez(int a)
{
i = a;
}
publik ez(int b)
{
u = b;
}
publik ez(int a, int b)
{
i = a;
u = b;
}
}
Vagy ez is jó lehet különböző típusokkal?
class ez
{
public int ez(int i)
{
return i;
}
publik string ez(string s)
{
return s;
}
publik char ez(char c)
{
return c;
}
}
Mert eddig erre nem láttam még példát sehol.
Vagy valamiféle object típust alkalmazzak a függvény hívásakor?
Egy object tömb-el?
public object[] tomb(int a, int b, string s, bool b)
{
tomb[] t = new tomb[4];
t[0] = a;
t[1] = b;
t[2] = s;
t[3] = b;
return t;
}
Fogalmam nincs hogy ez egyáltalán így jó-e?!....
Illetve ha az objectel jó, akkor abból hogy kapok vissza típust?
Vagy ezt így kell elképzelni ha visszatér?
object[] tomb = {11,22,"szoveg", true};
Mert ha igen, akkor ez így meg is felelne, már ha jót írtam.
Csinálhatod pl a következőket.
Tuple-t adsz vissza:
public (int szam, string s, bool bo) Nev(int a, int b, string s, bool bo)
{
return (a + b, s, bo);
}
Ez kb megfelel annak mintha object[]-öt adnál vissza (ok, ez value type) de itt telejs intellisense tábogatásod lesz a híváskor, azaz írhatod, hogy:
string ss = Nev(1, 2, "s", true).s;
Ehhez ne felejtsd el a target frameworköt legalább .NET 4.7-re állítani.
Egy másik megoldás hogy az utolsó 2 paramétert referenciaként adod át:
public int Nev(int a, int b, ref string s, ref bool bo)
{
s = "uj";
bo = true;
return a + b;
}
Ezt így hívhatod:
string ss = "regi";
bool b = false;
Nev(1, 2, ref ss, ref b);
Kis kiegészítés:
Bár a referenciás változat tekinthető szebbnek, ha referenciaként adod át a paramétereket, az azzal fog járni, hogy az eredeti változó értékét módosítod. Te lehet, hogy nem akarod, hogy az eredeti string felülíródjon, hanem egy másolatot akarsz visszaadni. Ezesetben a kevésbé elegáns Tuple-ös megoldás lesz a befutó. Ha gyakran használnád ezt a hármast, elgondolkozhatsz azon is, hogy létrehozol neki egy adatszerkezetet (struct).
Mindenesetre a legjobb megoldásra talán akkor találsz rá, ha újragondolod ezt a metódust. Tényleg így kell megoldani, hogy egy függvény adjon vissza 3 különböző értéket? Gondold végig, hogy pontosan mit is akarsz ezzel csinálni, fontos-e hogy egy metódus végezze az összes feladatot, illetve, hogy nem lehet-e úgy refaktorálni, hogy e gy osztály adatmezőit módosítsa inkább, vagy ahogy mondtad, egy osztály/struktúra konstruktoraként használni inkább.
Az object tömböd azért elég extrém volt.
Ennyi erővel visszaadhatnád egy stringben is, vesszővel elválasztva.
Köszönöm szépen a választ kedves első.
Majd jobban átvesézem amit írtál, és nekilátok.
Nagyon hasznosnak találtam.
Kedves utolsó válaszadó.
"Ennyi erővel visszaadhatnád egy stringben is"
Igazad van teljes mértékben.
De azt el kell ismerned, hogy nem a legszebb módja.
Ennél azért egy fokkal igényesebb vagyok a programom működésére.
Konvertálgat a jó isten. Mi vagyok én? Valami kodek?
Nem dekóder program lesz ez.
Ha van erre megoldás akkor miért ne használjam?
Legalább tanulok vele.
"Az object tömb elég merész volt"
Azért gondoltam object-re, mert úgy olvastam, hogy minden típus az object-ből származik.
Mondom! Olvastam a neten, mert ott tanulom magamban.(Azt sem tudom hogy ez igaz-e.)
Ezáltal feltételeztem annak a lehetőségét, hogy talán az object képes típussal visszaadni.
De oda írtam: "Fogalmam nincs hogy ez egyáltalán így jó-e?!...."
Objectekkel nem dolgoztam még sosem. Ideje ezt is bevezetni már.
Hello!
Én se vagyok benne biztos de szerintem az objekt is egy tömb, de c#ban pl az int is objekt làsd int.parae
Egyébként keress rá, hogy vannak e pairek
Tehát egy szimpla objekt 2 dologból jelen esetben return new key<String><int>(a,b)
Köszönöm a segítséget.
Jelenleg hanyagolom ezt a programot, mert közbe jött egy másik.
De ha újra ezzel foglalkozom, mindenféleképp hasznosak a leírtak, ezért le is mentettem. Megy a zöld..
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!