Hirdetés
- Házimozi haladó szinten
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- Vezetékes FEJhallgatók
- Hard Disk Sentinel: S.M.A.R.T., okosan
- Elkezdte felszámolni a GPU-s PhysX támogatását az NVIDIA
- Projektor topic
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Milyen videókártyát?
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen alaplapot vegyek?
Új hozzászólás Aktív témák
-
petyus_
senior tag
localban csinálj egy clean-t (legjobb git clean -fxd-vel, ez törli az összes file-t, ami nincs benne a repoban), és próbáld meg ugyanazt a parancsot futtatni, mint a workflowban. VS-ben buildelsz az nem teljesen ugyanaz, mintha dotnet build-et csinálnál, így könnyebb debuggolni, hogy mi lehet a gond.
-
cigam
titán
Miért nem talál (a GitHub fordító) pár NuGet-el feltett csomagot, pl. a DocumentForamat.OpenXML-t.
https://justpaste.it/f89be
Ezt hogyan tudom vele megetetni?[ Szerkesztve ]
-
cigam
titán
Lehet nem pont ide való, de majd átirányítotok a megfelelő helyre.
Ha jól láttam a GitHub le is tudja fordítani a forráskódot.
Készült egy /.github/workflows/dotnet-desktop.yml fájl, amit elkezdtem átszerkeszteni, de sok a fehér folt.
env:
Solution_Name: idojaras.sln # Replace with your solution name, i.e. MyWpfApp.sln.
Test_Project_Path: idojaras\idojaras.csproj # Replace with the path to your test project, i.e. MyWpfApp.Tests\MyWpfApp.Tests.csproj.
Wap_Project_Directory: your-wap-project-directory-name # Replace with the Wap project directory relative to the solution, i.e. MyWpfApp.Package.
Wap_Project_Path: your-wap-project-path # Replace with the path to your Wap project, i.e. MyWpf.App.Package\MyWpfApp.Package.wapproj.
Mijaza Wap project? Nekem látszólag nincs ilyenem. Mivel nem tudom maiz, elkészíteni se tudom. Kaphatnék ehhez egy kis segítséget, iránymutatást? -
cigam
titán
MI a difi a 2 megoldás között?
data = theCell.InnerText;
bool success = int.TryParse(data, out nightWindDirection);ill.
bool success = int.TryParse(theCell.InnerText, out nightWindDirection);
Csak mert az utóbbi formulát használva 3 cella kiolvasása jó, a 4. cella beolvasásakor fejreáll:
Ha előbb beolvasom egy string változóba, akkor lefut a 4. cella kiolvasása is. Mindegyik cellában számok vannak.
-
Postas99
senior tag
Szia!
Az nem lehet hogy [Ez alapján] a number egy outer érték ami csak azt adja meg hogy a cella számként van-e ábrázolva.
cellName.DataType = CellValues.Number;
-
cigam
titán
Szokták volt mondani, az olvasottság nagy fontos:
Retrieve the values of cells in a spreadsheet document
The Cell type provides a DataType property that indicates the type of the data within the cell. The value of the DataType property is null for numeric and date types.Ugyanakkor felveti annak a kérdését, hogy akkor mire való az
if (theCell.DataType.Value == CellValues.Number) ?![ Szerkesztve ]
-
cigam
titán
Console.WriteLine(theCell.InnerText);
Console.WriteLine(theCell.DataType.Value);
Ha a cellába "0" van beírva:
0
DocumentFormat.OpenXml.Spreadsheet.CellType.DataType.**get** returned null.
Az álmoskönyvek szerint Ilyenkor "Number"-t kellene kiírniaHa "0a" a cella értéke, akkor fura dolog történik:
12
SharedStringSajnos ilyenkor az int.Tryparse is 12-t ad vissza, hiszen 12-t kapja bemenetnek.
Végül ez a null adott egy ötletet:
if (theCell.DataType == null)
most így működik az ellenőrzés, ha nincs Datatype megadva, akkor szám van a cellában.Tegye fel a kezét, aki érti, vagy meg tudja magyarázni, miért ilyen az online Excellel módosított fájl a helyi onedrive mappából megnyitva.
[ Szerkesztve ]
-
sztanozs
veterán
valami szinkronizacios hiba lesz (vagy nem nezed a tryparse visszateresi erteket: ha false ertekkel ter vissza a fuggveny, akkor nem valtoztatja meg az int erteket amit referenciakent megadsz).
int i = 12;
int.TryParse("abc", out i);
# i erteke meg mindig 12
[ Szerkesztve ]
-
cigam
titán
Offline remekül működik, de abban a pillanatban, hogy egy MS365 ingyenes online fiókban módosítják a web-es felületen, elveszti a típusát. A theCell.DataType.Value null értéket ad vissza.
Pedig próbáltam a WEBes felületen is beállítani a cellák formázását, de tojik rá.
Mégiscsak int.TryParse lesz belőle -
cigam
titán
Ez lett a vége:
// Éjjeli maximum
addressName = "C4";
theCell = wsPart.Worksheet.Descendants<Cell>().Where(c => c.CellReference == addressName).FirstOrDefault();
// is Empty?
if (theCell.DataType != null)
{
// is Number?
if (theCell.DataType.Value == CellValues.Number)
{
data = theCell.InnerText;
if (data != "")
{
nightMaximum = int.Parse(data);
label_nightMaximum_ertek.Content = nightMaximum;
}
else
{
label_nightMaximum_ertek.Content = "-";
error = true;
}
}
else
{
label_nightMaximum_ertek.Foreground = Brushes.Red;
label_nightMaximum_ertek.Content = "?";
error = true;
}
}
else
{
label_nightMaximum_ertek.Content = "-";
error = true;
}
Ez a sok if minden egyes cellánál, azt üvölti, hogy lehetne ez jobban is. De hogyan?Hogyan tudnám az ellenőrzést kiszervezni úgy, hogy van amelyik cella szám, van amelyik szöveg, és attól függően hogy mi a problémám vele, más más szöveget kell megjeleníteni, van aminek még a színét is módosítom.
Egyáltalán ezt a "theCell"-t át tudom adni szubrutinnak (metódus?)? -
-
cigam
titán
Újra kellene egy kis iránymutatás:
public void GetCellValues(string fileName, string sheetName)
{
string addressName = null;
string data = null;
// Open the spreadsheet document for read-only access.
using (SpreadsheetDocument document =
SpreadsheetDocument.Open(fileName, false))
{
// Retrieve a reference to the workbook part.
WorkbookPart wbPart = document.WorkbookPart;
// Find the sheet with the supplied name, and then use that
// Sheet object to retrieve a reference to the first worksheet.
Sheet theSheet = wbPart.Workbook.Descendants<Sheet>().
Where(s => s.Name == sheetName).FirstOrDefault();
// Throw an exception if there is no sheet.
if (theSheet == null)
{
throw new ArgumentException("sheetName");
}
// Retrieve a reference to the worksheet part.
WorksheetPart wsPart = (WorksheetPart)(wbPart.GetPartById(theSheet.Id));
// Éjjel
addressName = "B4";
Cell theCell = wsPart.Worksheet.Descendants<Cell>().Where(c => c.CellReference == addressName).FirstOrDefault();
// If the cell does not exist, return an empty string.
if (theCell != null)
{
data = theCell.InnerText;
if (data != "")
{
nightMinimum = int.Parse(data);
label_nightMinimum_ertek.Content = nightMinimum;
}
else
{
label_nightMinimum_ertek.Content = "-";
error = true;
}
}
Megnyitok egy .xls fájlt, és a cellák adatait beolvasom. Működik is egészen addig, amíg számokat írok be. De ha véletlen egy "a" betű szerepel a táblázatban, kap egy 12-es értéket, mintha "12" lenne a cellába írva. Hogyan tudom megvizsgálni, hogy 1 és 50 közötti szám szerepel az adott cellában?
-
Alexios
veterán
muszáj az existinguser.Property1 = value1; minden egyes módosítandó adatnál, tehát a problem, hogy mindegyik elé mehet az object neve is.
De amúgy ez miért olyan nagy baj, vagy miért számít egyáltalán? Szerintem teljesen lényegtelen, martonx megoldása teljesen jól olvasható, ha nem létezik létre hozod, ha igen explicit látszik miket módosítasz, majd mentés, mindenféle magic nélkül ahol találgatni kell hogy működik és mint látjuk nehéz debugolni. Az egyetlen pont inkább ellene hogy ha az id-n kívül minden propertyt updatelni akarsz, akkor ha később hozzá adsz egy új propertyt akkor ezt is updatelni kell, de szerintem ezt azért meg lehet ugrani.
De tényleg, az hogy használni kell az object nevét nem kódismétlés, ettől nincs duplikalt kód, redundancia, akármi. Ha ennek a metodusnak a tartalmát atmasolnad egy másikba, ahelyett hogy ezt hívnád, na ott lenne kódismétlés, és abból lehetne gond.
[ Szerkesztve ]
-
Keem1
veterán
válasz
petyus_ #10164 üzenetére
Igen-igen, a Spotinál egy string az ID.
Spotify ID The base-62 identifier found at the end of the Spotify URI (see above) for an artist, track, album, playlist, etc. Unlike a Spotify URI, a Spotify ID does not clearly identify the type of resource; that information is provided elsewhere in the call.
Example: 6rqhFgbbKwnb9MLmUQDhG
Nálam a DB-ben az Id az egy autoincrement int, és a Spoti-féle Id-t egy Username stringben tárolom.
@martonx:
Innen indultam ki, amit írsz, csak míg egy object inicializálásakor megy ez:
var _obj = new Obj()
{
property1 = value1;
}... addig sajnos már létező objectnél (amit kiköp létező userként a DB) már nem lehetséges, muszáj az existinguser.Property1 = value1; minden egyes módosítandó adatnál, tehát a problem, hogy mindegyik elé mehet az object neve is. Tök jó lenne, ha ugyanez működne a már kiolvasott adatnál is, és ha pl. van 10 property, de én csak 4-et módosítok, akkor a blockban csak azt a négyet sorolom fel, míg az object nevét csak egyszer, a blokk elején.
-
petyus_
senior tag
var existing = db.SpotifyUsers.Where(x => x.Username == userdata.Id).SingleOrDefault();
db.Entry(existing).CurrentValues.SetValues(edited);Itt mi az edited? a másik kommentedben a userdata.Id-t hasonlítottad a Username-hez, akkor gondolom a spotify-os usernek az Id-ja a username, a te entity-dnek viszont egy int az id-ja, ezért kapod a hibát. A SetValues object-et vár, tehát nincs típus ellenőrzés, ezért kapod runtime a hibát
-
martonx
veterán
// userdata a method paraméterében
var existingUserData = await db.SpotifyUsers.SingleOrDefaultAsync(x => x.Username == userdata.Id);
if (existingUserData is null) {
db.SpotifyUsers.Add(userdata);
}
else
{
existingUserData.X = userdata.X;
existingUserData.Y = userdata.Y
}await db.SaveChangesAsync();
Ennyi.
-
Keem1
veterán
válasz
martonx #10161 üzenetére
&& Alexios
A redundanciát a következőre értem, illetve amit én szeretnék (egyszerűsíteni):
userdata jön az API response-ból, mivel ez egy API (abból is a Spotify-nál beloggolt user), így nekem kell eldönteni, hogy saját DB-mben létezik-e már.
Bárhogy is legyen, a userdata ojjektum adott, a friss, ropogós, API-ból érkező aktuális adat.
Ha létezik, ezt csak update-elni akarom a saját kópiámban, ha még nem, értelemszerűen létrehozni.Sematikusan valahogy így:
// userdata a method paraméterében
var existing = db.SpotifyUsers.Where(x => x.Username == userdata.Id); // Ezt még módosítom ahogy javasoltátok
if (existing != null && existing.Count()>0) db.SpotifyUsers.Update(userdata); //De ez nem megy, pedig jó lenne
else db.SpotifyUsers.Add(userdata);Tehát kvázi mindegy, hogy új adat-e vagy sem, nem kell új vagy update esetén sem újra értéket adnom ugyanannak a propertynek. Ha új data, akkor a teljes object az API returnból jön (userdata), ha létező, akkor pedig a kiindulási állapot a DB-ból lekért adat, és a különbséget (a userdata-hoz képest értve) tárolom le.
Ehelyett valami ezeréves szar trükközéssel próbálkoztál
Ez alatt amúgy mit értettél egészen pontosan?[ Szerkesztve ]
-
martonx
veterán
Érthető, de ahogy Alexios is írja, itt nincs semmi redundancia az update-nél
Hiszen te magad kéred le a kódban, hogy létezik-e. Ha létezik, akkor propertynként update és csá.
Hol itt a redundacia?
Ehelyett valami ezeréves szar trükközéssel próbálkoztál, ami persze hogy nem megy, mert ezer éves, azóta négyszer újraírták az FE-tmeg amúgy is pont az a felesleges redundancia.
Az existinget meg nem where-el kellene lekérned hanem SingleOrDefault-tal, az már elég csúnya lenne, ha a username-ek duplikáltak lennének. -
Keem1
veterán
válasz
martonx #10158 üzenetére
Van egy Spotify playlist automatizált motyóm, ami a Spotify API-val dolgozik.
Bár az elv több része is hasonlóan fog működni, most még a loggolt user (ketten csináljuk) DB-be letárolása megy, de a playlisteké is ugyanezen elv mentén fog.EF vagy EF Core?
EF Core 8Sajnos terjedelmi és egyéb okok miatt nem tudom bemásolni, de a logic a következő:
Van egy metódus: SpotifyLogin(SpotifyUser user)public DbSet<SpotifyUser>SpotifyUsers {get;set;}
[Table("spotifyusers")]
public class SpotifyUser()
{
[Key, Column("id")]
public int Id { get; set; }
[Column("tstamp")]
public DateTime? TimeStamp { get; set; } = DateTime.Now;
[Column("username")]
public string? Username { get; set; }
[Column("displayname")]
public string? Name { get; set; }
[Column("email")]
public string? Email { get; set; }
[Column("accesstoken")]
public string? AccessToken { get; set; }
[Column("followers")]
public int Followers { get; set; } = 0;
[Column("image")]
public string? Image { get; set; }
[Column("profileurl")]
public string? ProfileUrl { get; set; }
[Column("lastlogin")]
public DateTime? LastLogin { get; set; } = DateTime.Now;
}Ha az API-val sikerült beloggolnia (ennek a mikéntje jelenleg mindegy is), akkor lesz egy objektumunk, kb. ilyen:
var user = new SpotifyUser()
{
//itt az API által átadott adatok
}és ezután kerülünk abba a metódusba, ahonnan idéztem is már: SpotifyLogin(SpotifyUser user)
Éééés itt pedig ketté ágazik a dolog, de mint mindent, ezt is próbálom minél egyszerűbbre, univerzálisabbra, és ha lehet, a legkevésbé redundánsra csinálni.
Szóval letároljuk a usert DB-be, van egy user objectünk, amiről még nem tudjuk, hogy új-e vagy régi.
Ha új, egy új entry lesz a DB-ben, ha régi, akkor aktualizáljuk, de az ID-ja az változatlan marad.Innen már ismerős:
using (var db = new MySqlContext())
{
var existing = db.SpotifyUsers.Where(x => x.Username == userdata.Id);
if (existing != null && existing.Count()>0)
{
// Ez a bajos, ha létezik a user
// Ide valami olyan lenne jó, hogy:
// db.SpotifyUsers.Update(userdata);
// De erre csak egy új entry-t hoz létre a DB-ben
}
else
{
//Ez működik, ha még nincs ilyen user
db.SpotifyUsers.Add(userdata);
return (db.SaveChanges()>0? true : false);
}
}Szóval eddig jutottam, és a playlistek kezelése is kb ugyanígy fog kinézni, ha már létezik, akkor csak updateljük a followereket, a trackek számát, stb. Ha még nincs ilyen a DB-ben, akkor meg újként elmentjük teljes egészében.
Az update amúgy működne úgy, hogy igazából lekérem a létező usert, és soronként/propertynként "lemásolom" a datát, és úgy egy Update, de nem akarok ennyi redundanciát.
Ja, és meghagynám annyira univerzálisnak, hogy jelenleg működik MySQL és Sqlite DB-vel is, ami maradna, MySQL a fő cél, de backupnak meghagynám az SQLite-ot is.
Érthető valamennyire?
[ Szerkesztve ]
-
Keem1
veterán
Srácok, EntityFramework, lekérek egy entry-t a DB-ből, pár property-t módosítok, majd save-elném, de hiba jön.
var existing = db.SpotifyUsers.Where(x => x.Username == userdata.Id).SingleOrDefault();
db.Entry(existing).CurrentValues.SetValues(edited);Erre kapom azt, hogy:
The property 'SpotifyUser.Id' is part of a key and so cannot be modified or marked as modified. To change the principal of an existing entity with an identifying foreign key, first delete the dependent and invoke 'SaveChanges', and then associate the dependent with the new principal.Hogy tudnám megmondani neki, hogy az Id-t hagyja békén, ne akarja módosítani (én se teszem, nincs ilyen property az edited-ben)?
-
ReSeTer
senior tag
Helló!
Van egy általam elkészített C# .dll, amely matematikai képleteket tartalmaz, loop-ok stb, semmi igazán extrém.
Ezt fel szeretnék használni egy VB programban. Kell nekem bármi extra dolgot csinálnom, hogy működjön az én oldalamon?
Amennyiben C# környezetben van használva, akkor csak létre kell hozni egy példányt belőle, és már használhatóak a method-ok belőle, amelyek egy egyszerű eredményt dobnak vissza.
-
btraven
őstag
Tényleg így kell singleton-t csinálni?
using UnityEngine;
public class GlobalReferences : MonoBehaviour{public static GlobalReferences Instance{ get; set; }
private void Awake() {
if (Instance != null && Instance != this)
{
Destroy(gameObject);
}
else
{
Instance = this;
}
}
}
[ Szerkesztve ]
-
Tomi_78
aktív tag
válasz
joysefke #10150 üzenetére
Köszönöm a tanácsokat és a hivatkozásokat; meg is nézem mindjárt azokat.
Egyébként arra is gondoltam, hogy az is okozhatja a hibát, hogy a programnak nem állítok be egy fő felbontást, hanem azt szeretném érni, hogy minden képernyőfelbontáson egyformán fusson, közel azonos kinézettel, tehát legfeljebb a monitor által lekicsinyítve vagy felnagyítva a képek. Lehet, hogy tévúton vagyok ezzel az elképzeléssel is... -
joysefke
veterán
válasz
Tomi_78 #10149 üzenetére
Köszi, tehát a Count-1. Csak azt furcsállom, hogy olyan különösen viselkedik ezzel, ha másik névtérbe viszem át egy változóban a Count-1 értéket, mint most az elhelyez alprogramba, mert minden tankot elmozdít.
Próbáld meg debuggerrel megnézni, hogy mi a baj.
de az nem olyan egyszerű, ha eltérő a képek mérete.
A programodban felhasznált képeket igazítsd a programod követelményeihez és ne a programodat a képekhez. Szerintem a tankoknak meg minden entitásnak általad előre meghatározott mérete kéne legyen és ehhez a mérethez kéne a tank képét hozzáigazítanod.
Ha esetleg nem ismered, akkor itt tudsz inspirálódni:
Neon shooter:
https://github.com/MonoGame/MonoGame.Samples/tree/3.8.0/NeonShooter
tutorial:
https://code.tutsplus.com/make-a-neon-vector-shooter-in-xna-basic-gameplay--gamedev-9859tPlatformer:
https://github.com/MonoGame/MonoGame.Samples/tree/3.8.0/Platformer2D[ Szerkesztve ]
-
Tomi_78
aktív tag
válasz
joysefke #10148 üzenetére
Köszi, tehát a Count-1. Csak azt furcsállom, hogy olyan különösen viselkedik ezzel, ha másik névtérbe viszem át egy változóban a Count-1 értéket, mint most az elhelyez alprogramba, mert minden tankot elmozdít.
A másik, hogy igen, az induló Y koordinátáit akarom meghatározni a dolgoknak, de az nem olyan egyszerű, ha eltérő a képek mérete. Úgy meg tudom oldani, hogy a pályán legyen külön olyan lehetőség, hogy platform fölött a tank (van is), de ez fölösleges szaporítása az elemeknek. Az lenne az ideális, ha mindenhol csak a tank, stb. lenne és önműködően az alatta vagy felette (ami közelebb van) levő platformhoz igazodna, amikor létrejön. -
joysefke
veterán
válasz
Tomi_78 #10147 üzenetére
A Count megadja a List<T> aktuális elemszámát. Ha mindig a végéhez adod hozzá az újabb elemet (tehát nem beszúrsz) akkor a Count-1 fogja megadni az utolsónak hozzáadott elem indexét vagy -1-et ha nincsen még benne elem.
Debuggolni próbáltad már a programodat hogy megtaláld a hibát?
Ha a tank leesésére az animáció miatt van szükséged, az érthető. Ha viszont így akarod megkapni az induló Y koordinátáját az számomra fura. A platform elemednek van egy pozíciója az Y tengely mentén, van magassága, a tanknak is van kiterjedése ebből előre ki tudod számítani, hogy mi lesz a tank Y koordinátája.
Mondjuk én tuti úgy oldanám meg a platfom elemeket, hogy azok egy egy mezőt teljesen elfoglaljanak, tehát játék kezdetekor a pályarajz alapján triviális legyen, hogy a mozgó elemeknek mi az Y koordinátájuk.Az ütközésdetektálási kód (nem próbáltam meg értelmezni) nem tűnik bombabiztosnak, illetve nem látom, hogy miért kell neked téglalapok ütközésének detektálásához kódot írnod? A frameworkben amiben dolgozol nincsen Rectangle osztály aminek lenne bool Intersects(Rectangle other) metódusa?
[ Szerkesztve ]
-
Tomi_78
aktív tag
Sziasztok!
Annak megválaszolásában kérném a segítségeteket, hogy egy listába a legutóbb beszúrt elem indexét hogyan lehet megkapni? Mert én most a listanév.Count-1 képletet használom hozzá, de valamiért ez nem jó.
A programomban van egy palya nevű térkép, amely alapján elhelyezem a képernyőre a játék elemeit, viszont nem mindenhol illeszkednek így pontosan egymáshoz, amiknek kéne, pl. a szereplőknek a platformok fölé. Ezért azt csinálom, hogy a létrehozáskor az y koordinátájuk módosuljon úgy, hogy leessenek az alattuk levő platformra, és azután indulhatna a játék - de ez eddig nem sikerült nekem.
Így néz ki most, felvázolva lényege:/*1: Játékos, 2: robot1, 3: platform, 4: platform és fölötte robot1, 5: tank1, 6: platform és fölötte tank1,
7: ketrec, 8: platform fölötte ketreccel, 9: kis drón*/
switch (mostpalya) {
case 1:
palya = new int[,]{{0,0,0,0,0,0,0,0,0,0},
{0,0,9,0,0,0,0,0,5,0},
{0,0,0,0,3,3,4,8,3,3},
{0,0,0,0,0,0,0,0,0,0},
{3,4,3,3,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,3,3,0,0,3,8,3},
{0,0,0,0,0,0,0,0,0,0},
{0,3,3,0,0,3,3,3,0,0},
{2,0,0,0,1,0,0,0,0,5},
};Aztán egy tank létrehozása:
case 5:
var egyell3 = new JatekElemei();
egyell3.xhely = xh;
egyell3.yhely = yh-tank1all.Height;
egyell3.nezirany = "balra";
egyell3.mitcsinal = "jarkal";
egyell3.mostkepe = tank1all;
egyell3.neve="tank1";
egyell3.mozgseb = 6;
egyell3.elete=3;
egyell3.melyseg = 0;
jatelemlista.Add(egyell3);
elhelyez(jatelemlista.Count-1,egyell3.xhely,egyell3.yhely,egyell3.mostkepe.Width,egyell3.mostkepe.Height);
break;és az elhelyező alprogramok:
void elhelyez(int jatelem, int xh, int yh, int kepszel, int kepmag) {
while (yh<=Screen.PrimaryScreen.Bounds.Height-talcamag-cimsormag && kivelutkozik(jatelem,xh,yh+kepmag+1,kepszel,kepmag)==-1) {
yh+=1;
}
jatelemlista[jatelem].yhely = yh;
}int kivelutkozik(int hivoobj, int ittx, int itty, int objkepszel, int objkepmag) {
for (int i=0; i<jatelemlista.Count; i++) {
var je = jatelemlista[i];
if (hivoobj!=i && je.neve!="arcocska" && ittx<je.xhely+je.mostkepe.Width && ittx+objkepszel>je.xhely && itty<je.yhely+je.mostkepe.Height && itty+objkepmag>je.yhely) return i;
}
return -1;
}És az a fő baj, hogy az elhelyez alprogram hívása az összes tankot elmozgatja, nemcsak a jatelem indexűt, ami elvileg a jatelemlista.Count-1.
Az meg már csak a hab a tortán, hogy nem is jól teszi lentebb őket, hanem lóg a levegőben az egyik a kettő közül.
-
pmonitor
aktív tag
50 felett már többet felejtek mint amennyit tanulok
Ez igaz. Én meg már 40 előtt is ezt tettem a betegségeim miatt. Azóta én már halott vagyok. Már csak vérkeringésem van. Azért arra büszke vagyok, hogy addig sztem. egész jól haladtam. Ráadásul azt figyelembe véve, hogy sehol nem tanultam programozást.
-
cigam
titán
válasz
quailstorm #10144 üzenetére
Köszi! Nagyon régen használtam, és 50 felett már többet felejtek mint amennyit tanulok
-
cigam
titán
A VS-ben módosítottam a kódot, és ezt visszatölteném a GitHub-ra, de nem akarja. Hiába nyomok egy Push-t, látszólag valamit csinál, de nem tűnik el a módosítás:
Mit csinálok rosszul? -
martonx
veterán
válasz
ReSeTer #10140 üzenetére
Unit teszt is jó ötlet. Érted (vagy nem), de önmagában a class library nem futtatható, ergo nem debuggolható
Ez nem debuggolási kérdés, vagy hogy VS-t használsz-e.
Visual Studio Code is pont ugyanúgy megfelel a célnak. Egy console app-ba be kell referálnod, vagy egy unit tesztbe, vagy bármibe ami futtatható, és azon belül fogod tudni debuggolni, futtatni a class librarydet. -
ReSeTer
senior tag
válasz
martonx #10138 üzenetére
Írtam már normálisan futó programot, class library-t most csinálnék először és gondoltam van valami módszer a debugolásra anélkül, hogy csinálni kellene egy külön konzol programot csak ezért.
Nem használhatok VS community editiont, mert az egyik ingyenességnek feltételét kimerítjük (túl nagy létszám).
Ok, köszönöm, akkor csinálok csak debugolásra egy külön programot.
-
ReSeTer
senior tag
Helló!
Szeretnék készíteni egy .dll-t VS Code-ban, C# nyelven, amit majd egy másik program referenciaként használni tud.
Ezeket csináltam eddig:
Terminal-ba: dotnet new classlib
Aztán a Class1 osztályba ezt írtam:
namespace DLL_proba;
public class Class1
{public static int osszeadas(int elso, int masodik)
{
int eredmeny;
eredmeny=elso+masodik;
return eredmeny;}
}
Ha nyomok egy ctrl+F5-t akkor nem igazán akar végigmenni. Hogyan lehet ezt .dll-be összerakni?
C# Dev kit Extensiont nem használhatok, mert csak magáncélra ingyenes, és én pont egy céges gépen "tanulgatok".
[ Szerkesztve ]
-
pmonitor
aktív tag
válasz
Alexios #10133 üzenetére
int x = 0x55;
object obj = x;Itt "obj" szted. hány byte-os(bites)? Elmondom. x86-on 4 byte-os(32bites), x64-en 8 byte-os(64 bites). x64-en miért is foglal le 64 bitet a fordító? Azért, mert az "obj" referencia típus(gyakorlatilag egy mutató). A mutatók pedig 64 bites programban 64 bitesek.
De ez azt is eredményezi, hogy amit "beletesznek", azt mind ebbe a 4 vagy 8 byte-ba kell beleerőszakolni. Akár érték, akár referencia típus. Referencia típusoknál ez nagyon 1szerű, mivel "obj" is referencia típus. Érték típusoknál már nem ilyen 1szerű a helyzet. Mert itt az érték típus teljesen más típus, mint a referencia típus. Erre találták ki azt, hogy ilyen esetben létrehoznak példányosítanak 1 referencia típust, amibe belecsomagolják az érték típust(jelenleg 1 int típust). Így oldják meg, hogy 4 vagy 8 byte-ba "beleférjen" akár egy 32 byte-os érték típus is(mert a bedobozolt típus teljesen más memóriaterületen helyezkedik el).
Ennél a posztomnál itt is létrejön az object(ami ugyebár referencia típus), csak egy másik memória területen.public void TorlunkHaTudja()
{
if (adat is ITorol)
(adat as ITorol).delete();
}
Tehát van egy érték típusunk("Valami"), és van egy C#-on keresztül nem megfogható(megcímezhető) referencia típus, ami a "Valami"-nek a másolatát tartalmazza. A Main()-ben lévőgenTip.TorlunkHaTudja();
a "Valami" másolatán(bedobozolt példányán) hajtódik végre. Igen ám!! Csak mivel ezt a bedobozolt "Valami"-t nem tudjuk elérni C# kódból, így nem tudjuk az érték típusú "Valami" mezőit megváltoztatni(így az "ertek"-et sem. Gyakorlatilag azt lehet mondani, hogy a nem működő, vmint. az én módosításommal kiegészített kód is majdnem karakter szerint ugyanarra az asm-ra fordul(tehát ugyanazt csinálja). Csak az általam módosított változatban "o"-n keresztül C# kódból is el tudjuk érni a bedobozolt változatot, amit a nem működő változatban nem tudunk megtenni.
Boxing után x86 esetén az int 8 byte-ot foglal le a rendszer az 4 byte-os "int"-nek, míg x64 esetén 12 byte-ot foglal le egy 1-szerű, 4byte-os int típusnak!!
A boxing által létrejött referencia típusokat a GC takarítja el, miután már 1 referencia sem mutat rájuk.
Sajnos az alap könyvek is csak az érték és referencia szerinti paraméter átadást tárgyalja. Ami másik témakör. De ezt a másik témakört is 1szerűbb megérteni az általam vázolt programozási szemlélettel. Ezt egész röviden össze lehet foglalni:
1: Az érték típusok, és a referenciák(mutatók) alapesetben érték szerint adódnak át. Tehát érték típusú paraméter esetén az egész típus másolódik át.
2: A referencia típus esetén csak a referencia(mutató) másolódik át. Az itt levő kód esetén ezért lehet az elvileg "konstans" memóriát átírni. Ha a string érték típus lenne, akkor a "konstans" memóriát nem lehetne átírni, mert az eredeti stringnek csak egy másolatával dolgozna ez az algo.
3: Referencia szerinti paraméter átadásnál(ref vagy out) érték típus esetén az érték típusra, referencia típus esetén a referenciára mutató "pointer" adódik át.
Sztem ezek magától értetődő dolgok. Ezeket(mint látható) asm-ben be lehet bizonyítani. Magas szinten(C#), csak az ellentmondásokból(sok ellentmondásból) lehet következtetni, hogy ez így van, ahogy leírtam.
Sztem. nem nehéz megérteni.[ Szerkesztve ]
-
pmonitor
aktív tag
válasz
martonx #10131 üzenetére
1 troll ilyeneket ír??? Azóta sem kaptam rá választ. Sztem. pedig ennek a nézetnek alapnak kellett volna lennie a C#-ban. Csak hát ehhez programozni kellene... Sokat...
A többire meg: No komment.. -
martonx
veterán
Srácok, olvastam a felvetést, de direkt nem válaszolok a trollkodásra. Mert ez már színtiszta trollkodás.
Mindenki tökéletesen értette, gyanítom pmonitor is, hogy mit írtam.
Mintha nem lehetne valaki react, vagy angular fejlesztő, miközben nyilvánvalóan javascripttel / typescripttel dolgozik.
Trollkodni mindig lehet, válaszolni ezekre a baromságokra semmi értelme. Kérem ne etessük a trollt, lépjünk tovább, nincs itt semmi látnivaló. -
pmonitor
aktív tag
válasz
joysefke #10129 üzenetére
Nem trollkodni akartam. Az idézet előtt ezt írta:
Ez éppen egy nagyon jó példa arra, hogy még Asp.Net-en belül is annyiféle megoldás van, annyira szerteágazó, hogy rohadtul nem az a kérdés, hogy a byte array hány byte-on tárolódik, hanem lásd a fenti kérdést.
Azért Asp.Net-ben nem nagyon van byte array. C#-ban pl. annál inkább. Meg egyébként nem olyan elhanyagolható az, hogy a byte array hány byte-on tárolódik(persze nem Asp.Netben, hanem C#-ban). Ugyanis, ha biztosan belefér vminek az értéke 1 byte-ba, akkor sokkal jobban megéri a byte array, mint az int array. Mert ugyebár nem mindegy, hogy egy tömb 400 megát foglal le, vagy pedig 1600 megát!!! Ez azért elég jó optimalizáló tényező(mármint annak, aki ismeri, hogy mi hány byte-on tárolódik). Ha nem tudja, akkor hogy optimalizál??
Ezért bátorkodtam megjegyezni. -
cigam
titán
válasz
martonx #10125 üzenetére
Olvas(gat)om, de még az angolt is töröm, nem hogy érteném, hát még amit próbál elmesélni. Biztos jó, meg okos dolog, de most csak azt látom, hogy feleslegesen túlbonyolítja. Nézegetem a Graph Explorer-t, de így sem értem. Már a nevével is problémáim vannak. Miért grafikon?
Nekem nincs cégem, előfizetésem, azúrom, se semmim. Egy mezei ingyenes MS fiókom van. Ráadásul a OneDrive sem szinkronizálja le, a helyi meghajtóra, mert egy másik fiókban van az eredeti fájl, velem csak meg van osztva.Azért köszi, hogy próbálsz irányba állítani. Majd még olvasgatok. Meg a githubon is találtam egy Onedrive samples példakód gyűjtemény, hátha tanulok belőle valamit.
-
martonx
veterán
Microsoft Graph-al valahogy így kellene nekiállni:
1. Get started using OneDrive API - OneDrive dev center | Microsoft Learn
2. Download a file - OneDrive API - OneDrive dev center | Microsoft Learn -
cigam
titán
-
cigam
titán
Nem tudjátok mit variált az MS? Évek óta van egy kis programom, ami a onedrive-ról letölt egy .xlsx fájlt, és a benne levő adatokat feldolgozza.
Napok óta valami hibás fájlt tölt le. Maga a letöltés nincs túlvariálva:webClient.DownloadFile("https://onedrive.live.com/download?resid=2D7E...&authkey=%21...&em=3", @fileName)
Viszont most egy olyan fájl az eredmény, amiben van valami (26kB), de nem tudom beolvasni:System.IO.FileFomatException: A fájl sérült, adatokat tartalmaz.
Ha visszatöltöm a OneDrive-ba a letöltött fájlt, és megnyitnám az online Excelben, nem ismeri fel:
A munkafüzet nem nyitható meg, mert lehet, hogy a fájl formátuma nem egyezik a fájlkiterjesztéssel.Ami igaz is lehet, mert ha a OneDrive WEB-es felületéről töltöm le, csak 10.6kB a fájl mérete.
-
(ex)Cat
senior tag
válasz
joysefke #10117 üzenetére
Igen, ez a probléma valószínűleg, de nem tudok átugrani rajta vmiért. Próbáltam amit írsz, de sajnos nem működik. Bármi hasonló megoldással kísérleteztem, kb. ez lett a végeredmény:
"_-* #\ ##0\ _F_t_-;-* #\ ##0\ _F_t_-;_-* "-"??\ _F_t_-;_-@_-"
Azaz a # ## részbe az első # után is beleteszi a \ jelet és ez teljesen elcseszi a formátumot. Egészen addig jó amúgy amíg konkrétan bele nem teszem a numberfomat-ba.
Range r = excelWS.Columns["E"]; r.NumberFormat = format;
Azt hiszem, ezt kénytelen leszek elengedni.
-
joysefke
veterán
válasz
(ex)Cat #10116 üzenetére
Gondolom az a baj, hogy speciális karakter van a stringben és az nincsen megfelelően escapelve.
elsőnek sima "verbatim" stringkonstansként próbálnám megadni:
var format = @"_-* # ##0\ _F_t_-;-* # ##0\ _F_t_-;_-* ""-""??\ _F_t_-;_-@_-";
itt annyi történt, hogy a sztringen belüli dupla aposztróf karaktert megdupláztam, mert azt még verbatim sztringen belül is escapelni kell.
ha ez sem megy, akkor próbáld meg raw stringként, ahol is tripla-duplaaposztróf között van a sztring.
var format = """_-* # ##0\ _F_t_-;-* # ##0\ _F_t_-;_-* "-"??\ _F_t_-;_-@_-""";
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/verbatim
[ Szerkesztve ]
-
(ex)Cat
senior tag
Sziasztok
Egy excel táblázatot kellene létrehoznom c#-ban. Alapvetően ezzel nincs is baj, mert kész van, csak olyan gondom van, hogy bizonyos cellákra egy a user által megadott fomátumot kellene alkalmaznomKonkrétan a numerikus oszlopokhoz ez lenne az igény:
_-* # ##0\ _F_t_-;-* # ##0\ _F_t_-;_-* "-"??\ _F_t_-;_-@_-
Na most bármit is próbáltam eddig, egyszerűen nem sikerült megadni ezt mint NumberFormat-ot, mert egyrészt ugye a speciális karakterek miatt nem lehetett egy stringként összerakni, másrészt meg ha azzal trükköztem, hogy a \ és " jeleket vmi mással helyettesítve utólag kicserélem, akkor meg beszűrt néhány helyre felesleges \ jelet és onnantól persze hogy nem volt jó a képlet.
Tud vki valami megoldást erre?
-
Keem1
veterán
Srácok, 2 await 1 metódusban mennyire OK? Működik amúgy, de lehet bármi gond vagy akármilyen ellenvetés?
Mutatom:
var groups = await API.GetGroups("");
var items = await API.GetItemsByGroup(groups.FirstOrDefault().GroupId);
-
joysefke
veterán
válasz
Tomi_78 #10110 üzenetére
A képlet első ránézésre jónak tűnik. Próbálj írni pár tesztesetet amelyek általad előre kiszámolt eseteknek a képlet által visszaadott végeredményét tesztelik az általad elvárttal szemben. Aztán ha valami nem stimmel, akkor addig kalapálod a képletedet amíg végül az összes teszteseted zöld nem lesz.
Legalább minden negyedre ([0°-90°], [90°-180°], stb ) jusson egy teszteset. A -90° a +270°-el egyenértékű a képeden. -90 mod 360 = 270 mod 360. Tehát itt a -90 nem egyenlő +90-nel.
[ Szerkesztve ]
-
Tomi_78
aktív tag
Sziasztok!
Egy kis 3D-szerű programot készítek C#-ban és ebben szükségem van arra, hogy tudjam, hogy egy pont melyik irányban van egy másiktól a síkban.
Ehhez a következő képletet használom, miután kiböngésztem a világháló bugyraiból:Math.Atan2(kamnezy-(a_kamera.yhely+5),kamnezx-(a_kamera.xhely+5))*(180/Math.PI)
A kamera 10 képpont sugarú kör, ezért a középpontja +5 pixellel van a szélétől. Illetve van a kamnezx-kamnezy pont, ami 20 képpontnyira van a kamera előtt, és egy fekete vonal jelzi az irányát és a végét a mellékelt képen. A képeltben e két pont egymáshoz viszonyított irányát vizsgálom, próbaképpen.
Na de ami furcsa, az a visszaadott értékek. Ugyanis ha a kamera felfelé néz, akkor negatív számokat mutat irányként, míg ha lefelé, akkor a várttól teljesen eltérőt, pl. a képen látható 90-et a 270 helyett.
Végül is tudom ezeket korrigálni (felfelé az Abs() függvény használatával, míg lefelé úgy, hogy az új irányérték az a régi + (180 - régi) legyen), és így megkapni a valós értékeket, de akkor is kíváncsi vagyok arra, hogy mi lehet ezen hibák oka?
Netán mégis rossz a képlet?
-
pmonitor
aktív tag
válasz
pmonitor #10108 üzenetére
Itt található a jelenlegi munkaverzióm. Még nagyon kusza. csak idő kell hozzá..
-
pmonitor
aktív tag
válasz
sztanozs #10107 üzenetére
Azért nem jó, mert onnan hiányzik az RPN- képzése. A CodeProject tudja a függvényeket, de az RPN képzése hibás. Az andreinc.net-es példánál jó az RPN képzés, de a függvényeket nem tudja. Jelenleg egy kevert verzión dolgozom. Ahol az Az andreinc.net-es rész képzi az RPN-stringet, majd azt a Rosettához hasonlóan dolgozom fel az RPN-t. Mindezt körbekerítem a codeproject-es példával.
Hosszú menet lesz ez... -
pmonitor
aktív tag
válasz
martonx #10097 üzenetére
Ez éppen egy nagyon jó példa arra, hogy még Asp.Net-en belül is annyiféle megoldás van, annyira szerteágazó, hogy rohadtul nem az a kérdés, hogy a byte array hány byte-on tárolódik, hanem lásd a fenti kérdést.
Amire még én, mint Asp.Net fejlesztő se tudok csukott szemmel válaszolni,Sztem. egyébként inkább olyanok végeznek programozási munkát, akik megírták az a programot, amit még te sem tudsz megválaszolni.
----------------------------------------------------------------------------------------------------------------------
Egyébként most pont 1 RPN-t próbálok készíteni/találni. Igazából ezeket az oldalakat találtam hozzá:
[link]
[link]
[link]Ezek egyike sem hibátlan, vagy csak az egyik rész van implementálva. Ráadásul az egyik Java-ban is van, amihez a tudásom gyakorlatilag nulla. Sztem azért ez is programozás. De láthatod, hogy mintakód legalább mindegyikben van.
Na meg a szakkönyveket is ha nézed, azokban is vannak példa/minta kódok.
Csak az a probléma, hogy a nagyon erős fáradékonyságom miatt értelmes munkát(akár fizikai, akár szellemi) csak igen keveset tudok időt szakítani. De mondjuk én nem igazán sietek sehová... -
martonx
veterán
válasz
joysefke #10101 üzenetére
Persze, csak a sima Auth annotációval ráraksz valamit, ami fekete doboz, és fogalmad se lesz, hogy teljesül-e vagy nem, vagy egyáltalán jó helyen keresgélsz-e. Csak azt látod, hogy 401.
Vagy ha mázlid van, akkor azt látod, hogy beenged.
Ezért gondoltam elsőre annotáció nélkül megdebuggolni a metóduson belül, hogy WTF, aztán majd persze csinálni erre egy custom Auth attribute-ot. -
junkpod
veterán
Sziasztok! Összeraktam egy kódot a CodeLite-ben C++ ban. Ha elindítom a build and execute menut akkor szépen lefordítja és futtatja, kiválóan működik. Viszont én egy külön futtatható exe-filet szeretnék ebből készíteni. De egyszerűen nem tudok rájönni, hogy kell ezt a cuccot rávenni futtatható exe fordítására.
Átállítottam "debug"-ról "release" módra, meg is csinálta a release mappában, de az exe-re kattintva hiányolja a libc33.dll fájlt.
Tud valaki segíteni?
(bocs ha nem túl szakmai vagyok) -
joysefke
veterán
válasz
martonx #10100 üzenetére
Remélhetőleg valahol látszódni fog a useren, hogy min keresztül lépett be.
Erre a ClaimsPrincipal-on egészen biztosan lesz egy claim amit a HasClaim(claimType)-pal vagy valami hasonlóval lehet ellenőrizni.
Elsőre elég lehet egy if az onGetAccountban,
Azért érdemes a framework által biztosított auth check módszert használni, mert ha nem teljesül a policy, akkor a pipelineban a végrehajtás el sem jut addig hogy meghívódjon a Controller action method (gondolom Razornél is valami hasonló van annotálva), így hibázni sem tudsz és nem is kell a hiba kezelésével (redirect vagy error code) foglalkoznod.
[ Szerkesztve ]
Ú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!
- Bemutatta az Apple az iPhone 16e-t
- Path of Exile 2
- Trollok komolyan
- Új design és okosabb AI: megjött a Galaxy S25 készülékcsalád
- Monster Hunter (gyűjtő topik) - PC/PS/XBOX/SWITCH
- Házimozi haladó szinten
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- Ingyen kellene, de tegnapra
- A fociról könnyedén, egy baráti társaságban
- Parfüm topik
- További aktív témák...