Kezdőoldal » Számítástechnika » Programozás » C#-ban IComparable interface-e...

C#-ban IComparable interface-el, hogyan tudom megoldani, hogy az objektum 3 paramétere helyett csak 2-al végezze az összehasonlítást?

Figyelt kérdés

class Tanulo

{

int sorszam;

string nev;

DateTime belepesNapja; // <- Ez ne legyen összehasonlítva!


}


2020. febr. 3. 13:57
 1/9 anonim ***** válasza:

IComparable allows custom sorting of objects when implemented. When a class implements this interface, we must add the public method CompareTo(T). We implement custom sorting for a class with IComparable.

Az összehasonlítást te végzed úgy ahogy jónak látod, az IComparable csak annyit jelez hogy az osztálnyak létezik CompareTo() metódusa.

2020. febr. 3. 14:06
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:

Tehát akkor elfogadható az a megoldás pl, hogy:


public int CompareTo(Tanulo tanulo)

{

if(this.int.CompareTo(tanulo.int))

{

if(this.nev.CompateTo(tanulo.nev))

{

return 0; //Úgy mint eredetileg: -1, 0, 1

}

}

{...


...vagy írjak egy saját statikus metódust az összehasonlításhoz?

Azért kérdem, mert érzésem szerint a interface tök nem kell egy ilyen egyszerű összehasonlításhoz, a suliban viszont ezt kérik az ilyenekhez.

2020. febr. 3. 14:14
 3/9 anonim ***** válasza:

"Tehát akkor elfogadható az a megoldás pl, hogy:..."

Ez kis kódszösszenet legalább 5 fordítási hibát dob, úgyhogy nehezen gondolnám elfogadhatónak.


"...vagy írjak egy saját statikus metódust az összehasonlításhoz?"

Hogyan szeretnéd egy statikus metódusban összehasonlítani az aktuális példányt?


"Azért kérdem, mert érzésem szerint a interface tök nem kell egy ilyen egyszerű összehasonlításhoz, a suliban viszont ezt kérik az ilyenekhez."

És miért gondolod, hogy okosabb vagy, mint a tanárod?

Az IComparable interfészt használja több beépített rendező függvény is, ha implementálod, akkor azok is működni fognak a saját osztályaiddal is.

2020. febr. 3. 14:36
Hasznos számodra ez a válasz?
 4/9 A kérdező kommentje:

Kedves harmadik,


A kódszösszenet VS nélkül egy kezdő műve, aki egyelőre azt sem tudja mit csinál, de próbálkozik.


Statikusan így: MetódusgyűjteményOsztály.Osszehasonlito(obj1,obj2);


Ahol 1:1 kell összehasonlítani a két objektumot ott használtam eddig is.

Abban nem vagyok biztos, hogy ezt itt most így kellene megoldanom.

Tehát abszolút nem gondolom, hogy okosabb vagyok mint a tanárom, csak szeretnék információt gyűjteni ezzel kapcsolatban és sem a Microsoft dokumentáció, sem a StackOverFlow sem segített bár ez utóbbinál találtam az enyémhez hasonló megoldást, de le van pontozva.


[link]


Akkor kérdezek, ha végképp nem sikerül egyedül, próbálok mindennek magam a végére járni, mert alapvetően problémamegoldó típus vagyok.


Direkt itt kérdem, mert lehet név nélkül. Pl a Prog.hu-n is ha felteszel egy kérdést, akkor a rutinosok egyből leugatnak, leszólnak meg hasonlók, mert ők biza úgy másztak ki az anyjukból, hogy a hónuk alatt volt a C# dokumentáció.


Tipikus nagyképű bunkók az ilyenek. Csoda, hogy sok ember nem áll neki semminek, meg nem is mer kérdezni, mert az "okosok" egyből kiröhögik meg leszólják. Hál istennek én olyan vagyok ha ásás közben gyökeret találok csapok kettőt csákánnyal és ások tovább.


A szakterületemen sosem nevetek ki, vagy szólok le senkit aki nálam gyengébb, vagy kezdő. Mindig segítek, elvből.


Legalább 5 fordítási hiba, meg okosabb vagy mint a tanárod...


Tehát, ha kritizálni akarsz cimbora, ez nem az erre való csatorna. Ide segítségért jön az ember. Oktatásért, és nem kioktatásért.


Maradok tisztelettel,

40 éves férfi

OKJ szoftverfejlesztő tanuló

2020. febr. 3. 15:10
 5/9 anonim ***** válasza:
0%
Ha kezdő vagy ne prog paradigmákkal kezdj, hanem prog alapokkal.
2020. febr. 3. 17:36
Hasznos számodra ez a válasz?
 6/9 anonim ***** válasza:
74%

Esetleg ha egyszerűen csak nem írod bele a belepesNapja mező hasonlítását a CompareTo-ba?


class Tanulo : IComparable<Tanulo>

{

.. public int sorszam;

.. public string nev;

.. public DateTime belepesNapja; // <- Ez ne legyen összehasonlítva!


.. public int CompareTo(Tanulo other) {

.. .. if (other == null)

.. .. .. return 1;


.. .. if (this.sorszam == other.sorszam)

.. .. .. return this.nev.CompareTo(other.nev);


.. .. return this.sorszam.CompareTo(other.sorszam);

.. }

}

2020. febr. 3. 19:03
Hasznos számodra ez a válasz?
 7/9 A kérdező kommentje:

.. .. if (this.sorszam == other.sorszam)


.. .. .. return this.nev.CompareTo(other.nev);


Tehát ha a sorszám stimmel, akkor a névre már nem tesztelek rá if-el, hanem return az utolsó tesztelendő paraméterrel és akkor kapok igazat....vagyis ugyebár nullát ez esetben.


6-os, köszönöm szépen, bár ez eléggé logikus megoldás, nem jutott volna eszembe.

2020. febr. 3. 20:08
 8/9 anonim ***** válasza:
0%

"kapok igazat....vagyis ugyebár nullát ez"

C#-ban a nullának meg az egynek semmi köze a logikai értékekhez.

A 0 azt jelenti a két objektum egyenlő hierarchikusan, semmi "igaz" nincs benne.

2020. febr. 3. 20:55
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:

Think outside the box! :D


A másik formra ha nulla érkezik, akkor a két objektum az általam meghatározott összehasonlítási igény szerint ugyanaz, így gondoltam, hogy igaz.


De ha már idézgetünk:

"C#-ban a nullának meg az egynek semmi köze a logikai értékekhez."


Például: Az SQL-táblában tárolt BIT 1 vagy 0, bekérve onnan és kasztolva bool-ba, true, vagy false lesz C#-ban.


Ebben az olvasatban azért valami köze van hozzá ha rájön egy kasztolás által...

2020. febr. 3. 22:20

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!