| | |
| Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
Autor | Správa |
---|
Registrovaný: 01.05.14 Prihlásený: 07.11.19 Príspevky: 152 Témy: 52 Bydlisko: Dubovce |
Zdravím, Mám problém s Dátovými typmi. Rozhodol som sa že trosku "optimalizujem" svoj program ale po zmene int na iný typ napr. byte mi to hádže chyby. Zdroják: Kód: namespace pocitadlo { public partial class Form1 : Form { byte day; byte month; ushort year; byte aday; byte amonth; ushort ayear; ushort v; byte age; byte[] months = new byte[13] { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; public Form1() { InitializeComponent(); }
private void btnSend_Click(object sender, EventArgs e) { ushort s1 = 0; ushort s2 = 0; day = byte.Parse(txtDay.Text); month = byte.Parse(txtMonth.Text); year = ushort.Parse(txtYear.Text); aday = byte.Parse(txtADay.Text); amonth = byte.Parse(txtAMonth.Text); ayear = ushort.Parse(txtAYear.Text); if (year % 4 == 0 && ayear % 4 == 0) months[2] = 29; else months[2] = 28; for (int i = 1; i <= month; i++) s1 += months[i]; for (int i = 1; i <= amonth; i++) s2 += months[i]; v = (s1 + day) - (s2 + aday); if (day == aday && month == amonth) { age = ayear - year; if (year % 4 == 0 && ayear % 4 == 0) v = v + 366; else v = v + 365; } else age = (ayear - year) - 1; if (v < 0) { age++; if (year % 4 == 0 && ayear % 4 == 0) v = v + 366; else v = v + 365; } Output1.Text = "Máš "+ age +" rokov"; Output2.Text = "Za "+ v.ToString() + " dní budeš mať narodeniny"; } } } Chyby: Kód: Severity Code Description Project File Line Suppression State Error CS0266 Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?) pocitadlo C:\Users\GamerSK\Documents\CError CS0266 Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?) pocitadlo C:\Users\GamerSK\Documents\CError CS0266 Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?) pocitadlo C:\Users\GamerSK\Documents\CError CS0266 Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?) pocitadlo C:\Users\GamerSK\Documents\CError CS0266 Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?) pocitadlo C:\Users\GamerSK\Documents\CError CS0266 Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?) pocitadlo C:\Users\GamerSK\Documents\CError CS0266 Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?) pocitadlo C:\Users\GamerSK\Documents\C
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | |
Registrovaný: 01.05.14 Prihlásený: 07.11.19 Príspevky: 152 Témy: 52 Bydlisko: Dubovce | Napísal autor témy GamerSK: 23.02.2017 14:33 | |
|
Akosi som to nepochopil ...
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 Bydlisko: Žilina |
Čo konkrétne si nepochopil? Pokiaľ sčítavaš dva byty v C#, výsledok je vždy int a keďže int je väčší ako byte, musíš urobiť konverziu. PREČO to tak je sa vieš dočítať už na nete, napríklad aj v tých linkoch, ktoré sem postol BX.
_________________ C#, PHP, ... |
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 23.02.2017 14:58 | |
|
Pozri sem https://msdn.microsoft.com/en-us/library/5bdb6693.aspx do sekcie Conversions A ešte sa pre zaujímavosť chytím tej optimalizácie - čo vlastne optimalizuješ takýmto postupom? A aký bude výsledok takejto optimalizácie? Čo ňou získaš? (odpovedz ako v škole, len ma zaujíma, či naozaj vieš, prečo to robíš)
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 01.05.14 Prihlásený: 07.11.19 Príspevky: 152 Témy: 52 Bydlisko: Dubovce | Napísal autor témy GamerSK: 23.02.2017 15:30 | |
|
BX: Túto "optimalizáciu" robím hlavne kvôli menšiemu využitiu RAM. walther: Nepochopil som ako urobím konverziu.
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 Bydlisko: Žilina |
Pretypovanie je dôležitá časť pri jazykoch ako C#, treba si to doštudovať. Explicitné pretypovanie vyzerá napríklad takto: Kód: byte v1 = 10; int v2 = (int)v1;
Inak rada do budúcnosti, takýmto "optimalizáciám" sa snaž vyhnúť. Množstvo RAM, ktoré by si ušetril, nestojí za reč. Malo by zmysel o takýchto veciach uvažovať napríklad keby si programoval pre netduino, ktoré má veľmi obmedzenú pamäť, ale pre desktop/notebook s windowsom, pri takomto programe je to úplne nezmysel a strata času. Samotná NET platforma zožerie niekoľkonásobne viac. Taktiež si treba uvedomiť, že akonáhle potrebuješ robiť s takýmito premennými ďalšie operácie, napr +-, tak výhoda už mizne, lebo c# ti to pretypuje na int aj tak...
_________________ C#, PHP, ... |
|
Registrovaný: 01.05.14 Prihlásený: 07.11.19 Príspevky: 152 Témy: 52 Bydlisko: Dubovce | Napísal autor témy GamerSK: 23.02.2017 17:19 | |
|
walther ďakujem.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 8 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|