C# Metody

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Odpovědět
ponik
Level 3.5
Level 3.5
Příspěvky: 677
Registrován: 27 kvě 2009 23:47

C# Metody

Příspěvek od ponik »

čau,

začínám s C# a narazil jsem na tenhle problém.
Metodou RndList by mi měla vzniknout proměnná "list" kterou by následně metoda WriteList měla vypsat. Jenže pokud proměnnou "list" použiju jako parametr pro metodu WriteList tak mi vyskočí chyba že "list" neexistuje.
Jak dosáhnu toho abych mohl zmíněnou proměnnou používat i mimo metodu?

Kód: Vybrat vše

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            RndList(10);
            WriteList(list);
            Console.ReadLine();
        }
        static private void RndList (int x)
        {
            List<int> list = new List<int>();
            Random rnd = new Random ();
            for (int i = 0 ; i < x;)
            {
                list.Add(rnd.Next(99));
                i++;
            }
        }
        static private void WriteList(List<int> L)
        {
            for (int i = 0; i < L.Count; )
            {
                Console.Write("#" + L[i] + " ");
                i++;
            }
        }
    }
}

Dík
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7415
Registrován: 23 pro 2010 09:23

Re: C# Metody

Příspěvek od faraon »

Nešla by udělat jako public? V nejhorším případě jako globální.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)
ponik
Level 3.5
Level 3.5
Příspěvky: 677
Registrován: 27 kvě 2009 23:47

Re: C# Metody

Příspěvek od ponik »

změna na pubic ani na global nepomohla.

před tebou tu nekdo psal (pak to smazal, netušim proč) že bych měl proměnnou deklarovat mimo metodu. Podle toho jsem se dostal k tomuhle.

Kód: Vybrat vše

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine ("set list count");
            int count = int.Parse(Console.ReadLine());
            List<int> list1 = new List<int>();
            RndList(list1,count);
            WriteList(list1);
            Console.ReadLine();
        }
        static private void RndList (List<int> L , int x)
        {
            Random rnd = new Random ((int) DateTime.Now.Ticks);
            for (int i = 0 ; i < x;)
            {
                L.Add(rnd.Next(99));
                i++;
            }
        }
        static private void WriteList(List<int> L)
        {
            for (int i = 0; i < L.Count; )
            {
                Console.Write("#" + L[i] + " ");
                i++;
            }
            Console.WriteLine(" ");
        }
    }
}
ale to pořád nění to co bych chtěl. Múj cíl byl metoda která vytvoří proměnnou se kterou bych pak mohl dál pracovat (jestli to teda je možný)

dík
Uživatelský avatar
Tomasb98
Level 4
Level 4
Příspěvky: 1012
Registrován: 02 čer 2013 14:54
Bydliště: Hradec Králové

Re: C# Metody

Příspěvek od Tomasb98 »

Smazal jsme to protože když jsem to zkoušel tak mi to nefungovalo. Jak nedělám konsolové aplikace tak jsme ten list deklaroval úplně mimo...
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7415
Registrován: 23 pro 2010 09:23

Re: C# Metody

Příspěvek od faraon »

ponik píše:Múj cíl byl metoda která vytvoří proměnnou se kterou bych pak mohl dál pracovat
Vytvořit tu proměnnou mimo metodu je to co jsem ti psal také, platnou buď v celé třídě nebo v celém programu.

A co kdyby ta metoda tu proměnnou vracela? Nevím jestli to zrovna v C# jde, ale něco takového:

Kód: Vybrat vše

List<int> vytvorit(...)
          {
          ...
          return list;
          }

seznam=vytvorit();
Ale musel by sis asi nejdřív deklarovat vlastní typ List, aspoň v Céčku bych postupoval takhle.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)
Uživatelský avatar
domitea
Tvůrce článků
Příspěvky: 1971
Registrován: 24 čer 2009 19:46
Bydliště: Královehradecký kraj
Kontaktovat uživatele:

Re: C# Metody

Příspěvek od domitea »

Doplním Faraona:

Kód: Vybrat vše

static private List<int> RndList (int x)
        {
            List<int> list = new List<int>();
            Random rnd = new Random ();
            for (int i = 0 ; i < x;)
            {
                list.Add(rnd.Next(99));
                i++;
            }
            return list;
        }

Pak je ještě řešení nedeklarovat ten List v metodě, ale ve třídě. Proč? List deklarovaný v metodě existuje pouze a jen v rámci dané metody! ;)
ponik
Level 3.5
Level 3.5
Příspěvky: 677
Registrován: 27 kvě 2009 23:47

Re: C# Metody

Příspěvek od ponik »

Takže když to tak shrnu tak deklarovat proměnnou v metodě není dobrej nápad. Zůstanu u varianty deklarace proměnné mimo metodu, pro moje účely to stejnak asi bude ideální řešení. Škoda že mě to nenapadlo dřív.

Aspoň zase vím něco novýho, děkuji všem za příspěvky.
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: C# Metody

Příspěvek od CZechBoY »

Jakej je sakra rozdíl mezi konzolovým C# a oknovým C#?!

btw. když pracuješ s jednim objektem furt dokola tak udělej z těch funkcí metody toho objektu...

Kód: Vybrat vše

MyList list = new MyList(...);
list.Rnd(...);
list.Write(...);
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
Uživatelský avatar
Tomasb98
Level 4
Level 4
Příspěvky: 1012
Registrován: 02 čer 2013 14:54
Bydliště: Hradec Králové

Re: C# Metody

Příspěvek od Tomasb98 »

Vím no prostě jsme tam napsal blbost. :-(
Odpovědět

Zpět na „Programování a tvorba webu“