Jak předat metodě pole bez pomocné proměnné?   zodpovězená otázka

C#

Dobrý den,

jsem úplný začátečník v C# a potřeboval bych poradit, jak mohu přiřadit metodě pole, bez toho abych ho vytvářel v pomocné proměnné.


   //signatura metody A
   static void A(int[] pole)
   {
   }

//V metodě main

   //pomocná
   int[] tmp = { 1, 2 };
   //volání metody funkční
   A(tmp);

   //volání metody NEFUNKČNÍ
   A({ 1, 2 });

Opravdu se moc omlouvám za takto triviální dotaz. Ale naprosto nechápu proč přiřazení do proměnné funguje a do metody ne.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, pole musíte vytvořit tak jako tak, buď vytvořením předem a předáním názvu tohoto pole do metody nebo vytvořit nové pole přímo při volání metody, asi takto (podle Vašeho vzoru):

A(new int[] { 1, 2 });

Takže jste nebyl daleko ;-)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Mnohokrát děkuji za radu!

Vaše finta s klíčovým slovem new a datovým typem int[] funguje i pro vytvoření pole v proměnné.

Akorát moc nechápu proč to pole nemohu vytvořit stejně jako v proměnné. Překladač dokáže odhadnout datový typ podle datového typu proměnné, tak proč to nedokáže u metody?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Doporučuji si přečíst základy o polích. Jelikož to žádná finta není (a už vůbec ne moje vlastní), ale je to správná syntaxe pro vytvoření pole :-)

U metody to zkrátka nepřekousne, jelikož je to jen výčet čísel, ale že se jedná o pole, to program prostě neví. Ano, u vytváření pole to překousne, jelikož si to automaticky odvodí, ale rozhodně nedoporučuji ho takto vytvářet, jako jste to udělal Vy.

Pokud chcete při deklaraci pole rovnou přiřadit hodnoty prvkům, použijte tuto správnou syntaxi:

int[] pole = new int[] { 1, 2 };
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Přesně tak, správné deklarace pole jsou:

new int[] { 1, 2, 3 }

Je možné použít i zkrácenou variantu bez datového typu (pak ale musí jít z prvků pole jednoznačně určit datový typ - říká se tomu type inference):

new[] { 1, 2, 3 }

Pouze při přiřazení není nutné opakovat datový typ pole a použít new, to je ale jen syntax sugar, platí to jen u přiřazení.

int[] a = { 1, 2, 3 };
nahlásit spamnahlásit spam 0 odpovědětodpovědět

To slovo new není žádná finta, doporučuji si nastudovat rozdíl mezi datovým typem referenčním (třeba pole) a hodnotovým (třeba int). U hodnotového by tam new být nemuselo.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback