- Felháborodott az Apple, a Meta az iPhone-felhasználók üzeneteit akarja olvasni
- A luxusmárkáknak kell a bitcoin, az USA jegybankjának nem
- Letiltja az USA a politikusokat a telefonhívásokról és szöveges üzenetekről
- Nagy áttörés jön a napelemek piacán, nem kell annyi hely a paneleknek
- Belenyúlt az USA az Epic Games igazgatótanácsába, nyomoz az NVIDIA
Új hozzászólás Aktív témák
-
petyus_
senior tag
válasz bandi0000 #9959 üzenetére
Milyen dotnet verziót használsz? Az EnsureCreated az EntitifyFrameworkCore-ban van, amit te használsz az meg sima EF.
EnsureCreated
CreateIfNotExists -
petyus_
senior tag
válasz bandi0000 #9957 üzenetére
dbContext.Database.EnsureCreated()) létrehozza neked a DB-t, ha nem létezik. Meghívhatod akár constructorban is, de érdemesebb kiszervezni, és mondjuk IsDevelopment esetén meghívni.
Program.cs-ben mondjuk így tudod megoldani:
if (app.Environment.IsDevelopment())
{
using var scope = app.Services.CreateScope();
var services = scope.ServiceProvider;
var db = services.GetRequiredService<DbContext>();
db.Database.EnsureCreated();
}
Ha nem akarsz migrationökkel foglalkozni, akkor az EnsureCreated előtt meghívhatod az EnsureDeleted()-et is, így mindig törli/létrehozza a DB-t. (nyilván ezt prodban ne csináld ) -
martonx
veterán
válasz bandi0000 #9953 üzenetére
Ha Auto Migration kell, akkor a program.cs-be érdemes rakni egy ilyet:
//Auto migration
using var serviceScope = (app as IApplicationBuilder).ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope();
using var context = serviceScope.ServiceProvider.GetService<ApplicationDbContext>();
await context!.Database.MigrateAsync();Én kérek elnézést!
-
petyus_
senior tag
válasz bandi0000 #9950 üzenetére
Ahol lehet, érdemes async metódusokat használni (mondjuk egy saját használatra szánt webappnál nem valószínű, hogy észreveszed a különbséget, de egy desktop appnál ha nem async-ot használsz, akkor a mentés idejére megfagy a UI)
A validálással kapcsolatban, én főleg webes alkalmazásokon dolgozom, desktop appot soha nem csináltam még, így nem tudom ott hogy szokták megoldani. Weben általában amit lehet, már a UI-on validálunk egyből, ettől függetlenül a szerveren ugyanúgy még egyszer validálunk.
Biztos van valami event winformsban, amire fel tudsz iratkozni (mondjuk amikor a kurzor elhagyja az input boxot), itt meg tudsz csinálni minden validálást, és submitkor már valid lesz minden adat. Esetleg akkor validálnék újra a service-ben, ha valamelyik field mondjuk már meglévő adatoktól függ, és ez változhat közben.
-
joysefke
veterán
válasz bandi0000 #9945 üzenetére
Ahogy már írták a DbContext már önmagában is repository és unit of work.
Innen kezdve ha becsomagolod egy generikus repository + UoW absztrakcióba, akkor azt nem a funkcionalitás miatt teszed, hanem hogy elfedd a EntityFramework-öt, tehát hogy a repositoryt használó kód ne tudja magát az adott EfCore verzióhoz/funkciókhoz láncolni.
akkor van valami köztes réteg még a felület és az adatbázis közt, ami pl olyan feladatot látna el, hogy mentéskor ha ügyfelet és autót akarunk menteni, akkor a felületen kb csak annyi hívás legyen, hogy: SaveClientWithCar(Client client, Car car) és ez a köztes réteg lezongorázza a mentéseket ID generálással és beállítással?
Igen, a repository egy low level absztrakció az adathozzáférési rétegben.
Ha van egy featuröd (amit mondjuk egy UI page valósít meg) akkor annak a featurenek lesz konkrét igénye hogy adatokat tudjon olvasni a DB-ből (amit megjelenít a user számára) illetve a user által módosított adatokat perzisztálni tudja DB-be.
Az adatok formájára nézve a feature nyilván konkrét kívánalmakat fogalmaz meg. (e.g. mutasd az összes usert akinek van autója az autója típusával és évjáratával együtt) illetve meghatározza, hogy melyik adatmorzsa módosítható és melyik nem a feature kontextusában.Itt érdemes egy a featuret kiszolgáló, a repositorynál magasabb absztrakciós szinten lévő, data access service osztályt definiálni ami a repositoryra támaszkodva keríti elő a featuret hajtó kód számára az adatokat illetve menti el a változásokat. A repository-ból visszaadott adatokat arra a formára tudja adaptálni amilyen formában a featurnek szüksége van rá.
egy alternatíva lehet, hogy hagyod a repository patternt és ezeket az adott featuret kiszolgáló data access service osztályokat közvetlenül az Ef DbContext-re építed (DI-t használva nyilván) aztán a featuret hajtó logika használja ezeket (ezek interfészét).
[ Szerkesztve ]
-
petyus_
senior tag
válasz bandi0000 #9947 üzenetére
Attól függ, hogy definiáltad a kapcsolatokat. Ha használtad a virtual keyword-öt, akkor Lazy loading-ot használ, ez azt jelenti, hogy ha valahol használod az adott property-t, akkor ott fogja betölteni, egyébként nem. Ha nem használod a virtual-t, akkor csak akkor tölti be, ha használod az Include-ot.
Egyébként szerintem érdemes kikapcsolni a lazy loadingot (vagy mindehol elhagyod a virtual-t, vagy a context constructorában Configuration.LazyLoadingEnabled = false;). Ha mondjuk egy ciklusban végigmész a parent entity listán, és azon belül eléred a child entity-t, akkor annyiszor hívja meg a db-t, ahány elemed van a listában. Ez eléggé be tudja lassítani a dolgokat, szerintem jobb ha expliciten megadod az Include-ot ahol kell, máshol meg ne töltse be.
[ Szerkesztve ]
-
petyus_
senior tag
válasz bandi0000 #9944 üzenetére
A táblák összekapcsolását navigation property-kkel oldod meg Entity Framework alatt. Van egy User tábla, egy Car tábla, a User class-on csinálj egy Car property-t. Így ha le akarod kérni a Usernek a Car-ját, azt pl úgy tudod, hogy
context.Users.Where(u => u.Id == id).Include(u => u.Car)
(ha nem hívod meg az include-ot, akkor alapból azokat az adatokat nem tölti be)
Ez ugyanígy működik a másik irányban is, ha Usert (Clientet) akarsz menteni Car-ral együtt, akkor legyen egy User objektumod, amin van egy Car property,
context.Users.Add(user)
context.SaveChanges()
és elmenti a Car-t is.
De ha sokszor akarod használni a Car-t, akár Usertől függetlenül, akkor érdemes csinálni egy CarRepository-t, és azon keresztül dolgozni(mondjuk arról is folyton megy a vita, hogy EntityFramework-ot használva kell-e még külön repository, mivel a DbContext már maga egy repository, meg unit of work)
-
bandi0000
nagyúr
válasz bandi0000 #9944 üzenetére
+1
Ha ez a UnitOfWork jó dolog, és így kell működnie, akkor van valami köztes réteg még a felület és az adatbázis közt, ami pl olyan feladatot látna el, hogy mentéskor ha ügyfelet és autót akarunk menteni, akkor a felületen kb csak annyi hívás legyen, hogy: SaveClientWithCar(Client client, Car car) és ez a köztes réteg lezongorázza a mentéseket ID generálással és beállítással?Xbox One: bandymnc
-
Alexios
veterán
válasz bandi0000 #9808 üzenetére
Ha jól értem a problémád, akkor igazából az a gond hogy ha nem is singletonra van beregisztrálva a DI-ba a függőség, de ugyan azt a példányt adja vissza két külön requestre - ezt pl. lehet állítani asp.net core-ban biztosan, hogy milyen életű legyen a függőség, lásd: [link] Egy nagy mindenhez is értő szerviz feldarabolása mondjuk kifejezetten jó ötlet(single responsibility principle pl.), hogy minden csak azt hívjon ami kell is neki tényleg
Ettől függetlenül amúgy létezik természetesen method injection is, asp.net core-ban is akár, lásd: [link]
[ Szerkesztve ]
-
martonx
veterán
válasz bandi0000 #9669 üzenetére
"Mi okozhat olyat, hogy egy sima tàblàba való beszúrásnál dead lockot kapok, elvileg más nem használja ezt a táblàt"
Itt jön be az elmélet és a gyakorlat különbsége
Viszont, ha már dead lockot kapsz, akkor az azt is jelentheti, hogy gyakorlatilag folyamatosan írva van a tábla, lehet hogy több szálon futva.
Én a helyedben erősen újra gondolnám a DB sémát, EF használatát (lehet bulk insert jobb lenne?), cachelési stratégiát, ilyesmiket. Illetve erősen javaslom (ha lehetséges) .Net 6 irányába tovább mozdulni az ősi .Net Framework helyett. Hidd el, az elmúlt 5 évben elég sok mindenen optimalizáltak.Én kérek elnézést!
-
Alexios
veterán
-
Keem1
veterán
válasz bandi0000 #9167 üzenetére
Igen, közben rátaláltam erre, már beleástam magam Köszönöm a linket!
Persze, kiválóan tudok angolul (egy nagy amerikai multinál dolgozom, ahol az 5 körös interjúból 4,5 volt angolul és napi szinten van szükség rá).#9168 martonx:
Köszi, ezt megérdemeltem a lustaságom miattAmúgy ez a Mukesh Kumar féle szösszenet tényleg eléggé összeszedve mutatja a pro-kontra, meg összehasonlítási oldalról.
[ Szerkesztve ]
-
boorit
csendes tag
válasz bandi0000 #9145 üzenetére
Hát nem tudom, nekem a post az az éppen létrehozott objektumot adja vissza, put a módosítottat, delete NoContent-et. És ez a lista visszaküldés azért sem működne, mert pl be van állítva egy szűrő a táblázatra, akkor azt akarom, ha mondjuk törlök valamit, akkor a táblázatban a szűrt adatok maradjanak meg, aktuális oldal stb. Ez viszont csak úgy működhetne, hogy a requestben elküldöm a szűrőket is, ami nekem nem tűnik jónak.
Az adatok egy felhasználóhoz kötődnek, tehát ha használnék is SignalR-t, csak egy client lenne, akit értesíteni kell.
[ Szerkesztve ]
-
-
sztanozs
veterán
válasz bandi0000 #9139 üzenetére
A HTTP error kódok azért vannak, hogy használd... Ha minden 200-al térne vissza, honnan tudod (illetve tudja az automata), hogy nem azt kapod, amit kéne?
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
dqdb
nagyúr
válasz bandi0000 #9130 üzenetére
De most ez a megoldás nem rosszabb, mintha csak csinálnék pl egy osztályt, amibe van egy error és esetleg egy status code tulajdonság amit mindig visszaadok?
Ha kizárólag webes felületet nyújtasz, akkor szerintem ez az exception + middleware páros a legjobb.Ha vegyes felvágott a helyzet, mint nálunk, ahol webes és MQ felület is előfordul, akkor más a helyzet. Ezeknél az adott API implementációból az általad kérdezetthez hasonló üzenet jön ki, az API által dobható exceptionök kezelése belül megtörténik:
public class SomeResponse : IResponse
{
public string RequestID { get; set; }
public class OK : SomeResponse
{
public string SomeData { get; set; }
}
public class FailedBecauseOfThis : SomeResponse, IFault
{
public int Code { get; set; }
public string Message { get; set; }
}
public class FailedBecauseOfThat : SomeResponse, IFault
{
public int Code { get; set; }
public string Message { get; set; }
}
}Proto:
message SomeResponse {
string RequestID = 127;
oneof subtype {
SomeResponseOK OK = 1;
SomeResponseFailedBecauseOfThis FailedBecauseOfThis = 2;
SomeResponseFailedBecauseOfThat FailedBecauseOfThat = 3;
}
}
message SomeResponseOK {
string SomeData = 1;
}
message SomeResponseFailedBecauseOfThis {
int Code = 1;
string Message = 2;
}
message SomeResponseFailedBecauseOfThat {
int Code = 1;
string Message = 2;
}Sikeres válasz:
{
"some_data" : "data"
}Hibás válasz:
{
"code": 123,
"message": "blabla"
}Aztán ha MQ-n keresztül érkező kérésről van szó, akkor a teljes
SomeResponse
leszármazott megy vissza protobuf kódolással, ha webes kérésről van szó, akkor általában* egy réteg a hibákat a példány típusa és/vagy kód alapján megfelelő 4xx/5xx státuszkódokra mappeli és a hibaüzenetet tartalmazó JSON-t ad vissza, ha sikeres volt, akkor simán JSON megy vissza (webes kéréseknél aRequestID
sem kerül bele a válaszba, csak a konvertálást, szerializálást, naplózást befolyásoló attribútumokat az egyszerűség kedvéért lehagytam).* általában, mert volt, hogy a 200 azt jelentette csak, hogy a szerver válaszolt, és ugyanúgy protobuf ment vissza a kliens felé
[ Szerkesztve ]
tAm6DAHNIbRMzSEARWxtZW50ZW0gdmFka5RydIJ6bmkuDQoNClOBc4Ek
-
petyus_
senior tag
válasz bandi0000 #9127 üzenetére
Ha nem jó a user/pass, akkor 401. 400 akkor, ha valami gond van a requesttel (pl nem küldött pass-t, csak usert).
Loginnál jellemzően elég egy string, hogy invalid username or pass. (azért nem invalid username, meg külön invalid pass, hogy így ne lehessen kinyerni a username-eket).
Registernél jó kérdés, hogy mi a jó statuscode már létező userre, [link] itt pl megy a vita, hogy jó-e a 409 (conflict), de fel is sorolja valaki, hogy a FB/Google/stb mit küld. Én 400-at küldenék, mert ugyan nem client hiba, de neki kell változtatnia a requesten ahhoz, hogy jó legyen.
A hibakezelésnek meg nézz utána, core-ban (nem tudom milyen verziót használsz, azt hiszem 2.2-től, de lehet, hogy csak 3.0-tól) van egy ProblemDetails classt, ezt generálja ha validationError van. Ha túljut a validationön (ha csak az a gond, hogy már létezik ilyen felhasználó, akkor túljut), akkor megnézed, hogy van-e ilyen user, ha van, akkor a ModelState-hez adj hozzá hibát, és az mehet vissza, majd a framework csinál belőle problemdetailst (ez egyébként szabány [link] ).
AVagy ha feleslegesen bonyolult neked a problemdetails, akkor csinálj egy saját error-handlert (action filter, vagy middleware), ahol olyan response-t csinálsz, amilyet akarsz, amit egyszerűen tudsz kezelni frontend oldalon.
[ Szerkesztve ]
-
G.A.
aktív tag
válasz bandi0000 #9110 üzenetére
Majdnem eltaláltad, csak fordítva.
Ha CheckedListBox_SelectedValueChanged() hívom meg, akkor utána NumUpDown_ValueChanged() is meg lesz hívva. Ez lehet a hiba forrása?
Talán egy if()-el megoldom, hogy akkor ne fusson le, ha a CheckedListBox_SelectedValueChanged() hívta a fv-t. Tesztelem is... -
bandi0000
nagyúr
válasz bandi0000 #9043 üzenetére
Franc a hülye fejemet
Annyi volt a hiba, hogy fel volt cserélve a
app.UseAuthentication(); és app.UseAuthorization();Bár ez utóbbit nem biztos, hogy értem, hogy miért is lényeges, vagyis azt tudom hogy a kérés minden egyes middleware-en keresztül megy sorban, szóval lényeges a sorrend.
Az Authentication-nel ugye a usert-t azonosítjuk jelszóval együtt
Az Atuthozrization-nel meg azt, hogy mit tehat a user a rendszerhez, mihez van jogaXbox One: bandymnc
-
petyus_
senior tag
-
martonx
veterán
válasz bandi0000 #8970 üzenetére
A doksi nem segít? https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio
Nekem 3.1-el még csak egy projektem fut, abban így van beállítva a routing:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});De ez egy API app, nincsenek View-jai, csak Controllerek.
Én kérek elnézést!
-
dqdb
nagyúr
válasz bandi0000 #8538 üzenetére
(a + bi)(c + di) = ac + adi + bci + bdi² = ac + (ad + bc)i + bdi²
Mivel i = √-1, ezért i² = -1, azaz
ac + (ad + bc)i + bdi² = ac + (ad + bc)i + bd × (-1) = (ac - bd) + (ad + bc)i
Vagyis:
(a + bi)*(c + di) = (ac - bd) + (ad + bc)i
Ha megnézed ennek a .NET Core-ban található implementációját, akkor ott pontosan ez szerepel:
public static Complex Multiply(Complex left, Complex right)
{
return left * right;
}
public static Complex operator *(Complex left, Complex right)
{
// Multiplication: (a + bi)(c + di) = (ac -bd) + (bc + ad)i
double result_realpart = (left.m_real * right.m_real) - (left.m_imaginary * right.m_imaginary);
double result_imaginarypart = (left.m_imaginary * right.m_real) + (left.m_real * right.m_imaginary);
return new Complex(result_realpart, result_imaginarypart);
}Vagyis akárhogyan nézem, jól szoroz össze két komplex számot az ajánlott osztály (csúnya is lenne, ha nem).
tAm6DAHNIbRMzSEARWxtZW50ZW0gdmFka5RydIJ6bmkuDQoNClOBc4Ek
-
bandi0000
nagyúr
válasz bandi0000 #8536 üzenetére
közbe megtaláltam, hogy van egy Complex osztály, aminek első tagja valós, második pedig valós*I alakú, csak az a gond, hogy ha ezt pl egy komplex számmal szorzom, akkor az I*I nél nem I^2 hanem -1 es szorzó lesz, és ezt is el kellene végeznem
sztanozs: Köszi, ez jó leírás
[ Szerkesztve ]
Xbox One: bandymnc
-
sztanozs
veterán
válasz bandi0000 #8536 üzenetére
FYKI: System.Numerics.Complex
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Zalanius
tag
válasz bandi0000 #8526 üzenetére
Annyit tennék még hozzá, hogy ha az SQL változat jobban előtted van, akkor próbáld meg FK nélkül, minél olvasmányosabban felírni a LINQ-t. Vegyük az alábbit:
SELECT stud.FirstMidName + ' ' + stud.LastName AS FullName, grp.Credits
FROM dbo.Student AS stud
JOIN
(
SELECT enroll.StudentId , SUM(crs.Credit) AS Credits
FROM dbo.Enrollment AS enroll
JOIN dbo.Course AS crs ON enroll.CourseId = crs.Id
GROUP BY enroll.StudentId
) AS grp
ON grp.StudentId = stud.Id;Ennek egy megoldása:
var creditsByStudent = from sub in (from e in ent.Enrollments
join c in ent.Courses on e.CourseId equals c.Id
select new { e.StudentId, c.Credit })
group sub by sub.StudentId into g
join s in ent.Students on g.Key equals s.Id
select new
{
FullName = s.FirstMidName + " " + s.LastName,
Credits = g.Sum(x => x.Credit)
};--= Zalán =--
-
martonx
veterán
válasz bandi0000 #8523 üzenetére
Ez a linq még egészen olvasmányos. Szerintem itt nagyobb baj, hogy jó eséllyel fogalmad sincs, hogy SQL-ben hogy fognád meg ezt a problémát, mit jelent a groupby, hogyan dolgozzunk halmazokkal.
Nem szeretem ezt a fajta LINQ szintaktikát, na mindegy, közé kommenteztem, hátha így érthetőbb lesz, hogy mi - mit csinál.var data = //itt semmi értelme kiírni, hogy IQueryable<CreditReport> egy var bőven rövidebb
from enrollment in _context.Enrollments.Include(x => x.Student.LastName).Include(y => y.Course.Credits)
// a két include egy-egy sql joinnak felel meg, de rögtön szűr is, hogy csak 1-1 mezőt ad vissza
// gyanús, hogy ez felesleges bonyolítás, mert az enrollment-nek eleve van egy Student propertyje
// és talán Course property-je is? Ha jól van mappelve
group enrollment.Student by enrollment.Student.Id into dateGroup //itt csak szimplán rossz a dateGroup név :D mert ez StudentId-ra groupol :D
select new CreditReport()
{
FullName = dateGroup.FirstOrDefault().FirstMidName + " " + dateGroup.FirstOrDefault().LastName,
Credits = dateGroup.FirstOrDefault().Enrollments.Sum(x => x.Course.Credits)
};Selecten belül már nem kommenteztem, gondolom az triviális, hogy a group by-olt datasetből milyen adatokat veszel ki.
Szóval én a helyedben elsőre erősen utána néznék, hogy ugyanezt szimpla SQL-ben hogyan írnád meg, és miért, mire való a join, group by. Ha az SQL hátteret már érted, akkor a LINQ-t is jobban érteni fogod, hiszen az semmi mást nem csinál, mint egy SQL parancsot ad ki, csak épp nem SQL szintaktikával, hanem C# szintaktikával megfogalmazva.
[ Szerkesztve ]
Én kérek elnézést!
-
amargo
addikt
válasz bandi0000 #8109 üzenetére
Mondjuk a hibaüzenet elég egyértelmű. jól állítottad be az sql elérését? Azt megtudnád mutatni? Ha egyáltalán raktál fel.
Ez csak mellék szál, de ha egyszerűen akarod kezelni, miért model first lett? Code first inkább illik nekem a képbe vagy direkt ezt kérték a suliba?
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
-
Peter Kiss
őstag
válasz bandi0000 #7852 üzenetére
https://github.com/Robert-McGinley/TableParser
Egynek jó lehet.
-
martonx
veterán
válasz bandi0000 #7797 üzenetére
Az általában nem baj, ha egy kód nagy. Az a baj, ha nincs jól szervezve, nem olvasható, nem átlátható. Szóval neked most nem azon kellene törnöd a fejed, hogy szar megoldásokkal hogy nyerjek pár sort, hanem hogy szervezd normális olvasható, átlátható formába. Pl. Bevezetni repository patternt, funkciókat más classokba kiszervezni stb...
Én kérek elnézést!
-
lord.lakli
őstag
válasz bandi0000 #7789 üzenetére
OpTime-ba miért van do-while-ban minden? Látom nagyon szereted a do-while-t
Ha nem ESC-et nyom, akkor return, ha ESC, akkor meg a do-while lép ki.
Ha ESC-re fejezze be, akkor felesleges az egész do-while, helyette a kiírás után fapadosan ennyi kell:
while (Console.ReadKey(true).Key != ConsoleKey.Escape) { } -
Keem1
veterán
válasz bandi0000 #7785 üzenetére
Ezt nem értem igazán
"if, hogy ha escepe akkor csinálja, különben csináljon mást, csak ez a más a semmi kéne hogy legyen"
Mondjuk elhagyod az else ágat?Pl (nem ellenőrizve):
if (Console.ReadKey(true).Key == ConsoleKey.Escape)
Ha félreértettem a célt, akkor elnézést, nem kotnyeleskedni akartam, csak így elsőre nem áll össze a kérdésed.
[ Szerkesztve ]
-
kobe24
tag
válasz bandi0000 #7716 üzenetére
Már a programozós topicban is figyelgettem a hozzászólásokat, és szerintem sokan félreértik azt amit csinálnod kell. Nekem úgy tűnik, mintha sokan azt hinnék, hogy ezt egy olyan cégnek csinálod, akik használni is akarják ezt a programot (persze lehet most hülyeséget írok, de nekem ez jött le), viszont ők is egy szoftverfejlesztő cég, és ez inkább egy erőmérő (ahogy már te is írtad), szoktak hozzájuk menni gyakornokok is a suliból, nyilván ha látják benned a fantáziát, akkor megkereshetnek. A leírásban pedig azért vannak c++-os kódok, mert ők már akkor is adnak ki céges feladatot, mikor a diákok még abban a félévben járnak amikor c++-t tanulnak, és persze át lehetne írni a dolgokat, de szerintem így is érthető. Ott is konzolosan kell megcsinálni, és itt is, a WinForms és a WPF az majd a következő féléved anyaga lesz, nem is várja el ott senki, hogy ebben legyen megcsinálva. Szerintem a feladat leírásából azért látszik, hogy megcsinálható, anno én is meg tudtam csinálni (bár nem pontosan ez volt a feladat, de hasonló). Ez most félig neked címeztem, félig a többieknek, úgyhogy kicsit furán jön ki, de szerintem jobb ha mindenki tisztán látja, hogy miért kérik konzolos alkalmazásban.
-
sztanozs
veterán
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Milyen nyomtatót vegyek?
- Békéscsaba és környéke adok-veszek-beszélgetek
- Synology NAS
- Linux kezdőknek
- Google Pixel topik
- Óra topik
- Milyen autót vegyek?
- Bemutatkozik az ASUS új, belépőszintű gaming notebookja, a V16
- Interactive Brokers társalgó
- Veszprém és környéke adok-veszek-beszélgetek
- További aktív témák...
- Dell Precision M6700 17" kijelző i7-3632QM, 16Gb, Firepro M6000 2Gb "barkácsolóknak" - olvass
- AMD Ryzen 7 5700X/ASUS PRIME B550-PLUS/MSI RTX 3060 8 GB/32 GB DDR4/2 TB M.2 SSD/2x1 TB SSD/1 TB HDD
- Újszerű Apple iPhone 15 256 GB Fekete - 3 HÓNAP APPLE CARE, DOBOZZAL, TOKKAL, VÉDŐFÓLIÁVAL
- gyári Link Bracelet fekete 42/44/45/46mm
- !BONTATLAN! TP-Link UE330 3-Port USB 3.0 Hub & Gigabit Ethernet A
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest