- WhrlpoolMind: Búcsú a HD3870-től
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- LordAthis: Ismét egy "Idióta" A.I. Projekt, hogy meglovagolja az aktuális trendeket...
- gban: Ingyen kellene, de tegnapra
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- sh4d0w: Netflix? Ugyan, VW előfizetés!
- btz: Internet fejlesztés országosan!
Új hozzászólás Aktív témák
-
Sziasztok.
Lehet nagyon amatőr kérdét fogok féltenni, amiért előre is bocsánatot kérekk!
Mit jelent az pontosan, hogy az értékül adott kifejezés eredményének nem szükséges ismertnek lennie fordítási időben?
-
rgeorge
addikt
Egy kedves partnerünk kéri tőlünk, hogy idézem: "naplózzuk az XML fájlokat, amivel az ő webservice-jüket hívjuk". Van erre egyszerű megoldás C# oldalon? A fiddler-ről tudunk/tudnak, de azt gondolják, hogy ez csak pár sornyi kód lenne.
-
d3ad93
csendes tag
Én fősulin fogalkozok C#-al. Előtte java volt az, a programozás alapjait pedig c-ben tanultam. Ha azért tartod bonyolultnak a C#-ot, mert objektum orientált és ott pont a tömböt említetted akkor azt javasolnám, hogy az OOP alapjait nézd át kicsit, itt példányosításra és öröklődésre gondoltam. Ha azt megérted akkor szerintem nem lesz problémád vele.
-
vlevi
nagyúr
Össze kell joinolni a két listát.
[link]
Csináltam egy mórickaprogit, ami ugyanezt csinálja.class Program
{
class Dolgozo
{
public String nev;
public int ID;
}
class Projekt
{
public int dolgozoID;
public int projekt;
}
static void Main(string[] args)
{
List<Dolgozo> dolgozok = new List<Dolgozo>();
dolgozok.Add(new Dolgozo { nev = "Béla", ID=1 });
dolgozok.Add(new Dolgozo { nev = "József", ID=2 });
dolgozok.Add(new Dolgozo { nev = "István", ID=3 });
dolgozok.Add(new Dolgozo { nev = "Lajos", ID=4 });
List<Projekt> projektek = new List<Projekt>();
projektek.Add(new Projekt { dolgozoID = 1, projekt = 10 });
projektek.Add(new Projekt { dolgozoID = 3, projekt = 5 });
projektek.Add(new Projekt { dolgozoID = 4, projekt = 7 });
var projektlista = from dolg in dolgozok
from proj in projektek
where dolg.ID == proj.dolgozoID
orderby proj.projekt
select new { dolg.ID, dolg.nev, proj.projekt }
;
foreach (var item in projektlista)
{
Console.WriteLine(item.ID+" "+item.nev+" "+item.projekt);
}
Console.ReadKey();
}
}A lényeg középen van, a projektlista-ban
var projektlista = from dolg in dolgozok
from proj in projektek
where dolg.ID == proj.dolgozoID
orderby proj.projekt
select new { dolg.ID, dolg.nev, proj.projekt }
; -
pomorski
őstag
Köszönöm!
-
kingabo
őstag
Gondolom, ha a listában sima intek lennének simán menne a rendezés, ugye? Ha igen, akkor a rendezésnél használt feltétel úgy módosul, hogy nem a lista adott elemeit hasonlítod össze(2 int), hanem a két elem 1-1 propertijét: Projects.Count.
A te megoldásodnak is működnie kéne, valszeg valamit rosszul írtál meg. Igaz rettentően bonyolult és sok a fölösleges munka. Ettől függetlenül gyakorlásnak jó lehet.
-
Dinter
addikt
Van egy listám, amiben a dolgozók adatai, és egy másik, amiben hogy ki hány projektet végzett. A projektek száma alapján kéne sorba kiíratnom. Gondoltam rá, hogy lemásolom a számokat tartalmazó listát, azt sorbarakom, majd megkeresem a számok eredeti indexét a másik listában(ami = az azonosítójával a dolgozónak, ez által ki bírom íratni a nevét). Ez viszont nem működik. Mit ajánlotok?
-
Karma
félisten
A feltételezésed nettó tárgyi tévedés, semmi ilyen fekete mágia nem történik. Valószínűleg elcsúsztak az indexek a feltételben, és a sornak nincs ötödik eleme.
Kérlek kezdd el végre használni a Visual Studio debugger funkcióját, tégy egy breakpointot a problémás sorra, és meg tudod nézni hogy melyik változóban milyen értékek vannak.
-
Dinter
addikt
using (StreamReader uzi = new StreamReader("uzenetek.txt"))
{
while ((line = uzi.ReadLine()) != null)
{
Uzenet uzenet = new Uzenet();
var sor = line.Split(':');
(int.TryParse(sor[4], out numerikus) == true)
{
uzenet.projektszam = Convert.ToInt32(sor[0]);
uzenet.kuldes = sor[1];
uzenet.feladoid = Convert.ToInt32(sor[2]);
uzenet.cimzettid = Convert.ToInt32(sor[3]);
uzenet.uzenet = sor[4];
ertekelesek.Add(uzenet);
}
else
{
uzenet.projektszam = Convert.ToInt32(sor[0]);
uzenet.kuldes = sor[1];
uzenet.feladoid = Convert.ToInt32(sor[2]);
uzenet.cimzettid = Convert.ToInt32(sor[3]);
uzenet.uzenet = sor[4];
uzenetek.Add(uzenet);
}
}
}"Az index a tömb határain túl mutat" hibát kapok az if feltételnél, gondolom azért, mert egyszerre fordul le, és a line még nem kap értéket. Hogy tudnám ezt kiküszöbölni?
-
Karma
félisten
Akkor tehát az volt a hiba, amire gondoltam. Ha más változónevet használsz a foreachben, akkor nem lesz ütközés, és hiba se.
Ezt a versenyt nem ismerem, de mivel sehol se írják konkrétan, szerintem a szöveges felületet is el kellene fogadniuk. Azért megkérdeznék róla egy másik versenyzőt, egy szervezőt vagy neadjisten egy infótanárt.
-
Dinter
addikt
Ez már jó, csak arra írtam, hogy miért a for-ral próbálkoztam.
Ezt írta ki korábban:
A local variable named 'dolgozo' cannot be declared in this scope because it would give a different meaning to 'dolgozo', which is already used in a 'parent or current' scope to denote something else[link] Ez a feladat amúgy. Amikor azt írja, hogy kezelőfelületet kell készítenem, akkor arra gondol, hogy az alkalmazásnak WinForm Appnak kell lennie, vagy lehet Console App is?
-
Dinter
addikt
Erre gondoltam. Egyébként azért próbálkoztam for-ral, mert az előző(hibás) kódban ha a dolgozo-kon akartam végigmenni, akkor hibát írt ki.
bool sikeres = false;
do
{
Console.Write("Add meg a neved: ");
string nev = Console.ReadLine();
Console.Write("Add meg a jelszavad: ");
string jelszo = Console.ReadLine();
foreach (Dolgozo dolgozo in lista)
{
if (dolgozo.nev == nev && dolgozo.pw == jelszo)
{
sikeres = true;
}
else
{
}
}
if (sikeres)
{
Console.WriteLine("Sikeres bejelentkezés!");
}
else
{
Console.WriteLine("Nem sikerült bejelentkezni.");
}
} while (!sikeres); -
-
Karma
félisten
Húha. A belinkelt kódodban egyetlen Dolgozo példányt hozol létre, amit valamiért "dolgozok" nevű változóba raksz, és ennek tragikus következményei vannak a folytatásra nézve. Ha debuggerrel megnéznéd a listádat, akkor azt látnád, hogy bár annyi eleme van a listának, mint ahány sorod volt a szövegfájlban, mindegyik elem ugyanaz (a legutolsó rekord a fájlban).
Minden sorhoz új Dolgozo példányra van szükséged, lásd itt:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace dolgozok
{
struct Dolgozo
{
public int id;
public string nev;
public string pw;
public bool vezeto;
}
class Program
{
static void Main(string[] args)
{
List<Dolgozo> lista = new List<Dolgozo>();
string line;
using (StreamReader sr = new StreamReader("dolgozok.txt"))
{
while ((line=sr.ReadLine())!=null)
{
var sor = line.Split(':');
Dolgozo dolgozo = new Dolgozo();
dolgozo.id = Convert.ToInt32(sor[0]);
dolgozo.nev = sor[1];
dolgozo.pw = sor[2];
dolgozo.vezeto = Convert.ToInt32(sor[3]) == 0;
lista.Add(dolgozo);
}
}
Console.ReadKey();
}
}
}A nevezéktanba és a kisbetű-nagybetű dolgokba nem akartam belenyúlni, de lenne mit javítani azon a fronton. És egyébként az elején létrehozott string[4]-re sincs semmi szükség, mert a Split mindig újat hoz létre.
---
Az ide másolt kódban el tudnád mondani, mégis milyen indíttatásból csináltál hatos ciklusokat; és miért kéred be ennyiszer a nevet és a jelszót? A sorrend kicsit rossz, de ha a fejedben helyrerakod a lépések sorozatát, szerintem gyorsan rájössz a megoldásra. For ciklus nem lesz benne, és indexekkel se kell játszadoznod – a kérdés ugyanis az, hogy "van-e olyan Dolgozo a lista-ban, akinek a neve és a jelszava egyezik a megadott értékekkel?".
Athlon64+: Én úgy látom, az OP kérdés minden része le lett fedve.
De majd szól, ha valami kimaradt. -
Dinter
addikt
Adott a következő feladat:
A dolgozok.txt fájlból be kell olvasnom a dolgozók adatait, egy sorban egy dolgozó van. Az adatok típusát : választja el.
id:név:jelszó:cágvezető-e
1: Kata:12K55:1
2:Ica:9I44C:0
...kód: [link]
A feladat első része egy beléptető felület. Arra gondoltam, hogy beolvasom a felhasználónevet, megkeresem az indexét, ugyanezt a jelszóval, és ha a kettő nem egyezik (vagy -1 mindkettő), akkor sikertelen a belépés.
Itt viszont nem tudom hogy tudnék végigmenni a dolgozok-on, vagy egy dolgozónak kiíratni az összes adatát.
Így oldottam volna meg:bool helyes=false;
do
{
int nevindex=0;
int pwindex=0;
Console.Write("Add meg a felhasználónevet: ");
for (int i = 0; i < 6; i++)
{
if(lista[i].nev==Console.ReadLine()){
nevindex=i;
}
else{
nevindex=-1;
}
}
Console.Write("Add meg a jelszót: ");
for(int i=0;i<6;i++){
if(lista[i].pw==Console.ReadLine()){
pwindex=i;
}
else{
pwindex=-1;
}
}
if (nevindex==pwindex)
{
Console.WriteLine("\nSikeres belépés!\n");
helyes = true;
}
else
{
Console.WriteLine("\nHibás felhasználónév vagy jelszó!\n");
}
} while (!helyes); -
Karma
félisten
válasz
Peter Kiss #6674 üzenetére
Nem lesz végtelen ciklus, mert amikor a ReadLine nullt ad vissza – és a Split nem hívódik meg – az egész kifejezés értéke null lesz, a ciklus meg megszakad.
Bár tény, nem próbáltam ki, mert telefonon írtam, de nem hiszem, hogy ebben az esetben máshogy működne a ?. operátor, mint általában.
rgeorge: Írtam is.
-
Karma
félisten
"ezzel a módszerrel mindenképp egyből be kell töltenem egy másik stringbe, és a stringet splitelem?"
Itt azért fékezzünk egy kicsit. Azzal, hogy egy lokális változót vezetsz be a stringnek, még nem "töltesz" semmit sehová, és véletlenül sem lesz kettő stringed. Egyetlen példány létezik belőle, amit a ReadLine visszaadott, függetlenül attól, hogy hány néven nevezed.
A vlevi és martonx által leírt megoldás a helyes alapvetően.
Ha mindenképp meg akarnád spórolni azt a string változót, akkor a C# 6-os null-safe invocationnel meg lehet oldani tömörebben, de szerintem ennek nincs előnye ebben az esetben, viszont nehezebben olvasható.
while ((var sor = sr.ReadLine()?.Split(':')) != null)
{
// ...valami a sorral (String[])...
} -
-
Dinter
addikt
Azt hiszem rájöttem. Amikor másodszor is használom a while-lon belül (előtte a feltételben), akkor a következő sorra ugrik. Van valami módja, hogy a ReadLine tartalmát egyből spliteljem(a feltételben hibát ad), vagy ezzel a módszerrel mindenképp egyből be kell töltenem egy másik stringbe, és a stringet splitelem? Vagy simán átírom a feltételt !sr.EndOfStream-re Az a kérdésem továbbra is áll, hogy melyik módszer a legjobb?
-
Dinter
addikt
Mi a különbség, ha azt írom, hogy
using (StreamReader sr = new StreamReader("dolgozok.txt"))
{
while (sr.ReadLine() != null)
{
sor = sr.ReadLine().Split(':');
...
}vagy
using (StreamReader sr = new StreamReader("dolgozok.txt"))
{
while (File.ReadLines("dolgozok.txt")!= null)
{
sor = sr.ReadLine().Split(':');
...
}Az elsőnél a 6 sorból valamiért mindig csak a másodikokat olvassa be. Miért? A beolvasásnak melyik módját ajánljátok? StreamReader vagy File.ReadLines() while ciklusban?
-
Alexios
veterán
Azért csak az utolsó marad mert itt:
sorok=sor.Split(' ').ToList();
Mindig felülírod a sorok listát egy új listával.
A split metódus egy tömböt hoz létre ami a felosztás utáni stringeket tartalmazza. Ebből a ToList-el csinálsz egy string típusú listát, lényegében a tömböt alakítod át listává. A sorok=sor.Split kóddal nem hozzá adod a listához új értékként, hanem azt mondod hogy a sorok erre a listára mutasson. Vagy csinálsz egy listát ami List<string> típust fogad és abba rakod bele a .Add metódussal, vagy szebb megoldásként csinálhatsz pl. egy osztályt amibe beolvasod az árfolyamokat és ezeket rakod a listába. -
Dinter
addikt
Üdv.
Egy fájlból szeretnék beolvasni 3 sort, mindegyikben a következő van: árfolyam értéke
Ezt úgy gondoltam, hogy először splittel listbe szétszedem őket, aztán a párosokat és a páratlanakat külön egy másik listbe.Adott ez a kód:
List<string> sorok=new List<string>();
string sor;
using (StreamReader sr = new StreamReader("árfolyamok.txt"))
{
while((sor=sr.ReadLine())!=null)
sorok=sor.Split(' ').ToList();Hogy tudom elérni, hogy a listában az összes árfolyam tartalma megmaradjon, ne csak az utolsó? list.Add nem működik.
-
Angol34
csendes tag
Sziasztok!
Remélem nem off topik ha C# fejlesztői állást ajánlok?!Sürgősen keresünk Budapestre (13 ker) fejlesztő kollégákat hosszú távú, bejelentett munkára.
Szakmai elvárásaink: C#, .NET (4.0), XAML (Silverlight vagy WPF), WCF, tervezési minták, verzió kezelők ismerete.
Fiatal csapat, kiemelt fizetés, azonnali kezdés! Jelentkezni egyszerű szakmai önéletrajzzal:
hr kukac paytech.hu -
pakriksz
őstag
válasz
Peter Kiss #6659 üzenetére
azért nézd meg a kódot is... Fönt még nincs baja ugyan azzal a változóval. Lent van.
Egyébként pár összevissza mentegetés módosítgatás, nem ért semmit, majd újraindítottam ezt az ipari hulladék VSE-t, és eltűnt a hiba... Sajnos a microsoft most sem hazudtolja meg magát szoftver minőségben.
-
pakriksz
őstag
Erre valaki adjon már valami magyarázatot erre, mert nekem nem sikerült...
Mint látható, az aláhúzott változónak fönt tudok értéket adni, lejjebb már azt írja hogy nincs deklarálva. Ráadásul más változókat amiket ugyan ott ugyan úgy deklaráltam mint ezt (2 bool-t meg egy int-et) még a legbelsőbb if-ben is tudom használni.
-
Karma
félisten
válasz
MeghaL0L #6653 üzenetére
Ez nem elképzelés eddig, csak egy kocsmai ötlet, és egyébként egy nem túl acélos megoldás felé mutat.
Ha csak annyi a védelem, hogy "úgy eldugom a registryben hogy ne találja meg egy átlagfelhasználó", akkor akár egy fájlt is elrakhatsz az Application Data alatt, ott se fogja keresni. Az elég könnyen lenyomozható (ProcMonnal), hogy milyen kulcsot ellenőriz az alkalmazás indulás során.
Én nem szórakoznék házi megoldással, se nem akarnám feltalálni a kereket. Ha olyan szoftverről van szó, aminél tényleg megéri egy ilyen time trial változat elkészítése, mert majd nagy pénzek jönnek be utána, inkább azt javaslom, hogy fizess be egy kész licensing szolgáltatásra.
-
MeghaL0L
addikt
Sziasztok.
Visual Studioba szeretnék csinálni egy olyan programot, amely a registry-be beírja magát és amolyan Trial versioként működik.
Példának okáért:
30 Napos Trial.
2015.10.01 - én kezdődik
2015.10.31 - én lejárAmikor lejár, a program írja ki hogy Lejárt a próbaverzió. Dátumátállítással ne lehessen kijátszani illetve áltag felhasználó ne találja meg a registrybe.
Nem igazán megy a kivitelezése, hiába van meg az elképzelés!
Tudtok nekem ebben segíteni? -
ubid
senior tag
Na igen...
Viszont :
string s1 = "11.22.33."; //falseennek itt false-nak kéne lennie. De a c# az true-t ad vissza , mert 11.22.33 eddig MATCH-el...
Egy csúnya trükk, ha Match-et hívok,akkor mindig csak 1 match-el foglalkozok, amiből az illeszkedő string-nek ugyan akkorának kell lennie mint a bemenőnek...
De az nem a legszebb ... -
ubid
senior tag
A regex tökéletes.
Abban az online tool-ban.
Viszont C#-ba beillesztve már nem úgy viselkedik
var regex = new Regex(@"^((?:[0-9][1-9]|[1-9][0-9])(?:\.(?:[0-9][1-9]|[1-9][0-9]))*)",RegexOptions.Singleline);
string s = "11.22.33"; //true
string s1 = "11.22.33."; //false
Console.WriteLine(regex.IsMatch(s)); //TRUE
Console.WriteLine(regex.IsMatch(s1)); //TRUE
Console.ReadLine();Mind a kettőre TRUE-t ad... Pedig ugye a második az False
-
ubid
senior tag
Hali.
Regex-be elég gyenge vagyok...
Valaki tudna segíteni ?olyan regex kéne, ami a következőt validálja...
"dd.dd.dd...." - tehát egymás után MINDIG két szám áll, amelyekre igaz az, hogy mind a kettő egyszerre nem lehet 0 -tehát ez invalid : 11.22.00 vagy 11.00.22 stb.
A számokat mindig 1 pont választja el egymástól. ilyen sorozatból bármennyi lehet...
lehet olyan eset is amikor csak simán kettő szám van, tehát : 22 például.
A karaktersorozat legvége mindig két szám, tehát .-al nem végződhet...
-
alfa20
senior tag
válasz
daneel92 #6640 üzenetére
Én mondjuk kihagynám a tömböt, ha csak a sorozat utolsó értéke kell, akkor az megoldható pár változóval meg egy for ciklussal pl:
static void Main(string[] args)
{
Console.WriteLine("Írja be, hanyadik tagját szeretné kiszámolni a Fibonacci-sorozatnak!");
int elem = int.Parse(Console.ReadLine());
int a = 0, b = 1, c = 1;
for (int i = 2; i < elem; i++)
{
c = a + b;
a = b;
b = c;
}
Console.WriteLine(c);
Console.ReadLine();
}persze azt is meg kell ebben az esetben oldani, ha az 1., 2. elemet kérik be akkor mi legyen.
-
kingabo
őstag
válasz
daneel92 #6640 üzenetére
Legközelebb a VS debuggere tud segíteni ennek a megtalálásában: debug menü/exceptions: pipa a clr exceptions sorában a thrown oszlopba. Ezután már csak debuggolnod kell: amikor vmi kivétel következik be akkor megáll a progid futása, DE meg tudod nézni a változók értékeit, nemcsak egy hibát kapsz.
Utána ne felejtsd el a pipát kivenni, mert adott esetben eléggé idegesítő tud lenni, hogy minden kivételt elkap. -
Karma
félisten
válasz
daneel92 #6640 üzenetére
Ne akard tömbösen, mert úgy a 10000000000000. elemnél már gondok lesznek, pedig nem szükségszerű.
A hiba oka egyébként egyszerű: az i <= Fibonacci.Length ciklusfeltétel hibás, egyenlő nem lehet, hiszen a tömböt 0..Length-1-ig indexeli a nyelv.
És ha már itt vagyunk, kérlek legközelebb használd a Programkód formázást!
-
daneel92
tag
Sziasztok!
Pár hete kezdtem el programozni C#ban, és egy olyan algritmust szeretnék írni, ami kiszámolja a Fibonacci sorozat valamely elemét. Így néz ki a kódom:static void Main(string[] args)
{
Console.WriteLine("Írja be, hanyadik tagját szeretné kiszámolni a Fibonacci-sorozatnak!");
int tag = int.Parse(Console.ReadLine());
int[] Fibonacci = new int[tag];
Fibonacci[0] = 1;
Fibonacci[1] = 1;
for (int i = 2; i <= Fibonacci.Length; i++)
{
Fibonacci [i]= Fibonacci[i - 2] + Fibonacci[i - 1];
}
Console.WriteLine(Fibonacci[tag]);
Console.ReadLine();
}Viszont miután már programban megadom az értéket, utána ezt a hibaüzenetet dobja ki: "az index a tömb határain kívülre mutatott"
Hogyan tudnám ezt orvosolni? Mindenképp tömbös módszerrel szeretném kiszámolni, mert már csakazértis
Előre is köszi a válaszokat.
[ Módosította: Karma ]
-
amargo
addikt
-
ubid
senior tag
hm hm.. egy kis gondolat, és egyben kérdé is az okosabbakhoz...
A REF kulcsszóról lenne szó... az nyilván való, hogy value type-ok esetében mi a szerepe illete mi a jelentőssége..
de referencia típusoknál van értelme ?
A fordító engedi... működik... De a ref nélkül is módosul az érték, mivel amúgy is a metódus paraméterében a referencia pointere érkezik..csak épp "value"ként...Tehát van értelme a ref kulcsszónak referencia típus átadása esetén ,
public void Mod(ref RefTipus valami) { ...}
-
schlott
újonc
Üdv mindenkinek!
Van egy kis problémám. Egy értesítést kezelő programot kell készítenem és nem jövők rá, hogy amikor a for ciklusom eléri a 420 induljon újra a számláló illetve munkásokat is írni kell az adatbázisba a címek mellé és azt is ugratni kéne. Tehát arra lenne szükség,hogy indul a számláló kezdi írni a dátumot ha 420 megtelt először nézze meg hogy van e még munkás ha van azt írja 420-ig ugyan arra a napra ha nincs indul a következő nappal. Eddig jutottam de mint látni nem indul újra a számláló és a munkásokat se jöttem rá hogy-hogy változtassam. Ha valaki tud segíteni előre is köszi.int sum = 0;
string f = dateTimePicker1.Value.ToString();
for (int i = 0; i < dataGridView3.Rows.Count; ++i)
{
sum += Convert.ToInt32(dataGridView3.Rows[i].Cells[20].Value);
foreach (DataRowView s in checkedListBox1.CheckedItems)
{
if (sum <= 420)
{
dataGridView3.Rows[i].Cells[8].Value = f;
dataGridView3.Rows[i].Cells[24].Value = (s[checkedListBox1.ValueMember].ToString());
if (i >= 420)
{
i = 0;
}
}
}
}[ Módosította: Karma ]
-
tototos
addikt
Sziasztok!
Egy mappastruktúrát kell ellenőriznem a merevlemezen, hogy léteziik-e és amik hiányoznak azoakt létrehozni. A struktúrában vannak fájlok és mappák is. Ezt hogy lehet szépen tárolni a kódban?
Köszönöm a segítséget
-
Alexios
veterán
Húha, mennyire új neked a programozás?
Elég egyértelműen leírja amúgy a hibát, a metódus második paramétere más típusú mint amit vár.
Nullreference-t meg korábban valószínűleg azért kapsz mert String str3 = key.GetValue("CurrentVersion")
itt keresed a CurrentVersion kulcsot, de valószínűleg nem talál ilyet, azaz nullal tér vissza, amire meghívod a tostring metódust, de mivel amin meghívod null így exception-t fog dobni -
nuller
újonc
válasz
lord.lakli #6629 üzenetére
átirtam erre a 77 sort : using (RegistryKey key2 = Registry.LocalMachine.OpenSubKey(name, RegistryView.Registry64))
és ezt írja : http://i.imgur.com/1wCxmtj.png?1 -
martonx
veterán
Most hülyéskedsz? Debugold már végig azt a pár sort, és nézd meg, hogy hol kapsz null-t, és képzeld ott lesz a hiba.
Abszolút nem biztos, hogy a kóddal van baj, jó eséllyel valami környezeti változó / registry bejegyzés, telepítési útvonal nem lesz jó, ami nem a kód hibája. -
nuller
újonc
válasz
lord.lakli #6626 üzenetére
itt a code : http://hastebin.com/uzewawulix.tex meg tudnád nekem csinálni müködöre vagyis csak a problémát kéne kijavitani az arguments direkt nincs ott mert hosszú előre is köszönöm már jo lenne ha müködne
-
nuller
újonc
hali sziasztok ki foglalkozik itt c# nyelű progizásak kaptam egy ilyen hibát nem tudna valaki segiteni nagyon fontos lenne : http://i.imgur.com/Gfc06Ha.png?1
-
Lacces
őstag
Sziasztok!
Van olyan leírás, ahol leírják lépésről lépésre, hogy hogyan kell beállítani egy windows server 2012-t, ahova lehet publikálni asp.net alkalmazást? (Adatbázis, engédelyek, hogy a lokális gépen futó Visual Studioból lehessen publikálni a szerverre)
Én csak külön-külön próbáltam összeszedni az információt, de az adatbázis sem műkődik a szerveren, távolról sem tudok publikálni...
-
alfa20
senior tag
Köszönöm mind kettőtöknek, sokat segítettetek!
-
Peter Kiss
őstag
Nem tudom, mi a végcél, de ilyen feladatnál előbb összeszedjük az elemeket, majd random sorrendben kiszedjük őket:
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var listOfNumbers = new List<int>();
var minValue = 1;
var exclusiveMaxValue = 6;
for (var i = minValue; i < exclusiveMaxValue; i++)
{
listOfNumbers.Add(i);
}
var randomized = new int[exclusiveMaxValue - minValue];
var random = new Random();
for (var i = 0; i < exclusiveMaxValue - minValue; i++)
{
var index = random.Next(0, listOfNumbers.Count);
randomized[i] = listOfNumbers[index];
listOfNumbers.RemoveAt(index);
}
/* ... */
}
}
} -
lord.lakli
őstag
Én inkább List<int>-be pakolnám. List-nek van Contains fv, ami megmondja szerepel-e benne. Ha nem, akkor hozzáadod. Ezt az egészet egy while ciklusba, ami akkor álljon meg, ha Count 5-öt ad vissza.
Így nem kell for, do-while, csak egy while.A te megoldásodban az a baj, hogy "ronda"
és csak egyszer vizsgálod meg, hogy mit kell cserélni, de miután 5 elem kell és 1-5 között, így sokszor ismétlődhet.
Valami ilyesmi:
var tomb = new List<int>();
var r = new Random();
while (tomb.Count < 5)
{
int szam = r.Next(1, 6);
if (!tomb.Contains(szam))
tomb.Add(szam);
}String.Join(", ", tomb.ToArray())
Sőt ha csak kiírod, egyből mehet List<string>-be is.
-
alfa20
senior tag
Sziasztok!
Egy kis segítséget szeretnék kérni, most ismerkedem a C#-al, és el is akadtam:
van egy 5-ös tömböm, amibe Random töltöm fel a számokat 1-5-ig. Ez nem gond.
Majd do while-al megvizsgálom, vannak-e egyező értékű tömbök, ha van cserélem a tömb értékét Random számmal, viszont sajnos így is van ismétlődésÍgy néz ki a kódom:
Random r = new Random();
int[] tomb = new int[5];
for (int i = 0; i < 5; i++)
tomb[i] = r.Next(1, 6);
int j = 0;
int a = -1;
do
{
a = Array.IndexOf(tomb, tomb[j]);
if (a >= 0)
tomb[j] = r.Next(1, 6);
j++;
if (j == 5)
break;
} while (a >= 0);
String kiiras = "";
foreach (int x in tomb)
kiiras = (kiiras + x + ", ");
MessageBox.Show(kiiras);A j nem lehet 4-nél több, a tömb elemei miatt.
kellene még egy do while talán? -
leximester
tag
válasz
lord.lakli #6615 üzenetére
Igen az. De a többi is az, amiken próbáltam.
-
lord.lakli
őstag
válasz
leximester #6614 üzenetére
Gondolom a te géped Win10, ugye?
-
leximester
tag
Sziasztok!
Az alábbi a problémám:
Van egy UWP appom, amelyik nem fordul le.
VS 2015 ezeket dobja:
1: "Cannot resolve Assembly or Windows Metadata file 'Windows.winmd'"
2: "Type universe cannot resolve assembly: Windows, Version=255.255.'255.255, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime."Más gépeken lefordul.
Próbáltam a Win10 SDK-t illetve a VS-t is újrarakni, de maradt ugyan az.
Valakinek ötlete? -
pakriksz
őstag
Hello
Ki kéne javítanom egy nagyon hülye kódot, amit nem egyészen értek, és én tökmáshogy csináltam volna, de nem akarom újraírni a program felét. Fájlból olvasott kódot ellenőriz, mármint azt hogy megtörtént-e a próbálkozás. Nem pontosan írom a kódot, csak nagyjából, egyszerűsítve.
Van egy enum, aminek első pár eleme így néz ki:
public enum SettingsFlags
{
Setting1 = 0x0001,
Setting2 = 0x0002,
Setting3 = 0x0004,
//és továbbAztán SettingFlags checkFlags; deklarálva van, majd minden egyes fájlból olvasott érték után csinál valamit:
ReadFloat(); checkFlags |= SettingsFlags.Setting1;
ReadFloat(); checkFlags |= SettingsFlags.Setting2;
ReadFloat(); checkFlags |= SettingsFlags.Setting3;
//és így továbbMajd ellenőrzi, hogy mind be lett e olvasva:
if (checkFlags == (SettingsFlags.Setting1 | SettingsFlags.Setting2 | SettingsFlags.Setting3
Na most a gond az, hogy nem feltétlenül szükséges az összes paraméter, de mivel ezek a flagek máshol is szükségesek, nem hagyhatom ki az olvasás utáni checkFlags buzerálást. Ha az ellenőrzésnél lehagyom a nem feltétlenül szükséges paraméterek flagjait, akkor meg ugye soha sem lesz true, mert nem stimmel a szám.
Szóval lehet ellenőrizni csak bizonyos flagek meglétét, vagy csak az összeset lehet? -
Keem1
veterán
Huhh, harmadik olvasásra fogtam fel, amit mondasz. Hiába, mostanság túl sok volt a PHP és túl régen a C#, már látom hogy hülyeséget csináltam
Viszont úgy tűnik, hogy az eredmény nem azonos.
Míg a PHP eredményül csak az og:image kép URL-jét adja eredményül, addig a C# ugyanarra a kifejezésre az og:image résztől kezdve a meta tag végéig az egész sztringet visszaadja.
Esetleg ötlet, hogy mitől lehet? Ettől függetlenül természetesen nagyon köszönöm az útmutatást.Hopp, máshol is ezt mondták, tehát egyértelműen alapvetően a saját hülyeségem a hiba oka, mindenkinek feltűnt, csak nekem nem.
Viszont akkor tényleg új probléma van, hogy sajnos nem a tiszta kép url-t kapom, hanem némi felesleggel megspékelve: [link]
#6611 Karma: meglesed ezt a fenti linket? Itt szerintem látni fogod, ha futtatod. PHP csak a kép url-t adja vissza.
-
Karma
félisten
A baj nagyon egyszerű, sajnos a fordító hibaüzenete nem sokat segít elsőre - bár igaza van, olyan karakter nincs, hogy \s.
'og:image"\s*content="([^"]+)"' <-- ez nem valid string literál C#-ban. JavaScriptben meg gondolom PHP-ban elmegy, de itt kötelező idézőjelekkel körbevenni. Aposztrófokkal char literált kapsz. Ha nem lenne ott a \s, akkor már egyértelműbb lenne a hibaüzenet.
Helyesen így nézne ki, amit le akartál írni:
@"og:image""\s*content=""([^""]+)"""Mint láthatod, a belső idézőjeleket meg kellett duplázni. A @ prefix pedig azért kell, hogy a backslasheket ne escape karakterként kezelje, hanem közvetlenül tegye bele a stringbe. (@ nélkül azokat is meg kéne duplázni.)
-
Keem1
veterán
Emberek, elsősorban PHP-ban és C#-ban is járatos kollégák tanácsára, segítségére lenne szükségem.
Adott egy PHP-ban tökéletesen működő reguláris kifejezés, ami valahogy egyáltalán nem akar működni C# alatt, pedig szükségem lenne rá.A PHP-ban perfektül működő kód:
preg_match('/og:image"\s*content="([^"]+)"/', $content, $matches);Ez akarna lenni a C#-os verzió:
Match talalat = Regex.Match(Content, 'og:image"\s*content="([^"]+)"', RegexOptions.IgnoreCase);Fordításnál kapott hiba:
"Unrecognized escape sequence", és a \s részhez mutat az üzenet.Sajnos a regex kifejezést muszáj lenne megtartanom, mert a PHP-s és a C#-os programok részben ugyanazt a feladatot végeznék és ehhez szükségem lenne arra, hogy az a művelet, ahová szánom mindkettőt, az megegyező eredmény sztringet generáljon.
Minden ötletet, javaslatot előre is köszönök! -
Karma
félisten
válasz
tototos #6600 üzenetére
Ott valamit nagyon elnézel, az input változó biztosan nem egy szöveget tartalmaz. Mondjuk ha megpróbálod kiíratni, akkor tényleg ezt kaphatod.
Az a helyzet, hogy a LINQ query szintaxis, hasonlóan a legtöbb LINQ metódushoz, nem listát ad vissza, hanem egy IEnumerable-t; leegyszerűsítve egy "képletet", hogy hogy lehet végrehajtani az általad felsorolt műveleteket. Nem is fut végig a stringlistádon ekkor még.
Ha a visszakapott IEnumerable-ön hívsz egy ToList()-et, végigfut a ciklus és megkapod a tényleges listát.
var lines = File.ReadLines(fileName);
var input = (from line in lines
where (!line.Contains("dblink"))
select line).ToList();Így már input egy List<String> lesz, benne a neked kellő sorokkal.
A metódus formában ez így nézne ki, igazából szerintem egy ilyen egyszerű szűrésnél sokkal jobban olvasható:
var lines = File.ReadLines(fileName)
.Where(line => !line.Contains("dblink"))
.ToList();---
A ToListen kívül a ToArray, ToDictionary, ToLookup metódusok hívásakor, továbbá foreach ciklussal vagy XAML bindinggal is kiértékelődik a képlet.
Nagyon oda kell figyelni arra, hogy ahány ilyet hívsz, annyiszor újrakezdi a teljes számolást! Ezért miután a képleted teljes, célszerű a ToListtel materializálni a listát, és így megspórolni a felesleges újraszámolásokat.
---
Csendben kicseréltem a ReadAllLines hívást ReadLinesra. Ennek a verziónak az a hatalmas előnye, hogy nem olvassa fel azonnal a teljes fájlt a memóriába, hanem soronként dolgozza fel, ahogy materializálódik az eredmény, memóriát spórolva. Jobban is passzol a LINQ filozófiájához.
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- AMD Radeon™ RX 470 / 480 és RX 570 / 580 / 590
- Plazma TV topic
- Milyen billentyűzetet vegyek?
- Sony Xperia 1 V - kizárólag igényeseknek
- Nintendo Switch 2
- Xiaomi 15 - kicsi telefon nagy energiával
- Debrecen és környéke adok-veszek-beszélgetek
- Vezetékes FEJhallgatók
- Építő/felújító topik
- Yettel topik
- További aktív témák...
- Telefon felvásárlás!! Samsung Galaxy A14/Samsung Galaxy A34/Samsung Galaxy A54
- AKCIÓ! Asus ROG Flow Z13 +ROG XG RTX 3070- i9 12900H 16GB DDR5 1TB SSD RTX 3050Ti 4GB + RTX 3070 W11
- Samsung Galaxy A53 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
- Dell Latitude 5330 i3-1215U 6magos! - 16GB 512GB 13.3" FHD magyarbill 1 év garancia
- Bomba ár! Dell Latitude 7320 - i5-11GEN I 8GB I 256SSD I HDMI I 13,3" FHD I Cam I W11 I Garancia!
Állásajánlatok
Cég: FOTC
Város: Budapest