•  

    int x = Console.ReadLine();
    int temp = 0;
    if (!int.TryParse(x, out temp)
    {
    Console.WriteLine("komunikat");
    }
    else if (x == 0)
    {
    // itd
    }
    else if (x > 100)
    {
    //itd
    }
    else
    {
    // wykonaj metodę
    }

    czy ktoś jest w stanie mi wyjaśnić dlaczego muszę prży TryParse() zadeklarować dodatkową zmienną tymczasową (int temp = 0), mimo że nie nigdzie jej nie zwracam - przy udanej konwersji x na int leci dalej sprawdzanie warunków if/else if/else, a w przypadku niepowodzenia wywala komunikat...

    nie chcę przyjmować "na wiarę" tylko zrozumieć why? #csharp #programista15k #programowanie

    •  

      @hiperchimera: no jest wszystko w doksie:
      When this method returns, contains the 32-bit signed integer value equivalent of the number contained in s, if the conversion succeeded, or zero if the conversion failed.

    •  

      @hiperchimera: bo tak działa ta metoda, przyjmuje string który chce sparsować i pointer do obszaru gdzie zapisać sparsowany wynik

    •  

      @hiperchimera uruchamiałeś to w ogóle? Console.ReadLine nie zwraca int tylko string, więc x musi być też typu string.

      Dodatkowa zmienna temp jest po to, żeby do niej przypisać wynik konwersji stringa na int przy pomoca Int.TryParse a później ją sprawdzać w if/else, a nie x.

    •  

      string x = Console.ReadLine();
      int temp = 0;
      if (!int.TryParse(x, out temp))
      {
      Console.WriteLine("komunikat");
      }
      else if (temp == 0)
      {
      Console.WriteLine("zero");
      }
      else if (temp > 100)
      {
      Console.WriteLine("> 100");
      }
      else
      {
      Console.WriteLine("mniej niz 0 albo wiecej niz 0 i mniej niz 100");
      }

    •  

      @wielkibanan: mój błąd wybacz, pisałem z pamięci na komórce na szybko (i z rozpędu walnąłem int zamiast stringa) podobny kod do tego co mam w WPF - mea maxima culpa

      natomiast odnośnie Twojego wpisu dalej
      to jest perfekcyjnie jasne i logiczne...

      ale właśnie nie mam tam temp w if/else tylko dalej leci po zmiennej x (z textbox) i porownuje z warunkami - będę w domu to wkleje właściwy z aplikacji WPF

    •  

      @hiperchimera:

      czy ktoś jest w stanie mi wyjaśnić dlaczego muszę prży TryParse() zadeklarować dodatkową zmienną tymczasową (int temp = 0), mimo że nie nigdzie jej nie zwracam - przy udanej konwersji x na int leci dalej sprawdzanie warunków if/else if/else, a w przypadku niepowodzenia wywala komunikat...

      1. Nie musisz. Przynajmniej nie w jednej linii. inline out variables. Więc możesz mieć: if (!int.TryParse(x, out var _))
      2. Dlaczego... bo to jest metoda TryParse, a nie IsParsable. Mogłaby przyjmować mniej parametrów jakby tak autorzy tej klasy zdecydowali, ale stwierdzili, że przyjmuje więcej. To nie JS, że możesz sobie pominąć jak ci się nie podoba.

    •  

      @wielkibanan: tak to wygląda (sprawdzone i działa)

      private void ButtonClick1(object sender, RoutedEventArgs e)

      {

      string number = TXB1.Text;

      int temp = 0;

      //sprawdzenie czy pole nie jest puste

      if (string.IsNullOrWhiteSpace(number))

      {

      MessageBox.Show("Podaj wartość liczbową w odpowiednim polu", "Ostrzeżenie o błędzie");

      TXB1.Clear();

      }

      else

      {

      if (!int.TryParse(number, out temp))

      {

      MessageBox.Show("Wybrana wartość nie jest liczbą, wprowadź prawidłową wartość ponownie", "Ostrzeżenie o błędzie");

      TXB1.Clear();

      }

      else if (int.Parse(TXB1.Text) == 0)

      {

      MessageBox.Show("Nie możesz wybrać zerowej ilości liczb do losowania", "Ostrzeżenie o błędzie");

      TXB1.Clear();

      }

      else if (int.Parse(TXB1.Text) > 10)

      {

      MessageBox.Show("Nie możesz wybrać wiekszej ilości liczb jak 10", "Ostrzeżenie o błędzie");

      TXB1.Clear();

      }

      else

      {

      Draw(80, int.Parse(TXB1.Text));

      TXB1.Clear();

      }

    •  

      @hiperchimera: przecież to jest kompletne spaghetti

      +: misund
    •  

      @kywmn: chętnie posłucham porad jak to zrobić lepiej :-)

      jest okno z textbox, do wpisywania wartości, wartość ma być w przedziale 1-10, tylko liczbowa, zabezpieczona przez wprowadzeniem spacji czy innych znaków innych jak liczba

    •  

      Nie wiem jak duża to aplikacja WPF ale jeżeli trochę większa i chcesz coś więcej uczyć się w tym kierunku to zamiast eventu powinieneś zastosować command oraz zainteresować się wzorcem MVVM. Poza tym poprawiłem to na szybko mam nadzieje ze bez błedu xD Chyba teraz powinien być widoczny sens try parse.

      private void ButtonClick1(object sender, RoutedEventArgs e)
      {
      const string MessageBoxTitle = "Ostrzeżenie o błędzie";

      string inputText = TXB1.Text;
      TXB1.Clear();

      if(string.IsNullOrWhiteSpace(inputText))
      {
      MessageBox.Show("Podaj wartość liczbową w odpowiednim polu", MessageBoxTitle);
      return;
      }

      int number;
      if(!int.TryParse(inputText, out number))
      {
      MessageBox.Show("Wybrana wartość nie jest liczbą, wprowadź prawidłową wartość ponownie", MessageBoxTitle);
      return;
      }

      if(number == 0)
      {
      MessageBox.Show("Podaj wartość liczbową w odpowiednim polu", MessageBoxTitle);
      return;
      }

      if(number > 10)
      {
      MessageBox.Show("Nie możesz wybrać wiekszej ilości liczb jak 10", MessageBoxTitle);
      return;
      }

      Draw(80, number);


      }

    •  

      @kywmn: mała na potrzeby własnej nauki, dopiero zaczynam (1msc) zabawę z C# więc staram się ale czasami wychodzi takse...

      dzięki

    •  

      @hiperchimera: Spoko mam nadzieje, że pomogłem (✌ ゚ ∀ ゚)☞ Fajnie jest też unikać tzw. magic number'ow https://en.wikipedia.org/wiki/Magic_number_(programming) w sensie unnamed numerical constants.

    •  

      @kywmn: ps. sens TryParse() jak najbardziej rozumiem, tylko konstrukcje metody już nieco mniej ;-) chociaż w Twoim kodzie zaczyna to wyglądać bardziej sensowne (⌐ ͡■ ͜ʖ ͡■)

      obczajam linka, tnx

    •  

      @hiperchimera: Konstrukcja jest taka a nie inna ponieważ w poprzednich c# nie można było tak wygodnie zwracac wielu zmiennych z metody jak jest to w c# 7.0 więc aby wygodnie używać TryParse z if to zwraca ona boola a przez outa przekazuje się jakby wskaźnik na docelową zmienną do której przypisywana jest oczekiwana wartość po udanym parsowaniu. Jednocześnie ustanowiło to konwencje metod typu TryParse.

Gorące dyskusje ostatnie 12h

  • avatar

    Będąc na oddziale ginekologii, czekając w poczekalni, podszedł do mnie facet, około 30-stki. Już na pierwszy rzut oka widzę, że jest dosłownie oszołomiony, oczy mu się świecą, uśmiech od ucha do ucha, podchodzi bliżej i krzyczy: "Cześć, właśnie zostałem ojcem!!!". Dodam tylko, że widzę faceta pierwszy raz w życiu, on mnie też ( ͡° ͜ʖ ͡°) Odpowiadam euforycznie, że świetnie, cieszę się, wspaniała wiadomość. Urodził mu się syn, pyta, czy mi pokazać zdjęcia, przystaję na tę propozycję, a w zasadzie pytanie retoryczne. Facet pokazuje zdjęcia, filmiki ze łzami w oczach. Syn śliczny, oczy brązowe po tacie, wiem, ile waży, ile ma cm, wiem, że żona dzielna. I nie wiem kiedy, ale zaczęłam ryczeć razem z nim. Powiedział, że jestem pierwszą osobą, która zobaczyła jego synka! A teraz musi już iść pokazać młodego rodzinie i znajomym. Przytulił mnie, uścisnął dłoń i dziękował jakieś 100 razy.

    Dawno nie czułam tylu pozytywnych emocji i to od obcego mi człowieka! To zdecydowanie genialny poniedziałek! (。◕‿‿◕。) #czujedobrzeczlowiek #heheszki #gownowpis #logikaniebieskichpaskow #logikarozowychpaskow #dzieci #niewiemjaktootagowac #pozytywnie
    pokaż całość

    odpowiedzi (24)

  • odpowiedzi (24)

  • avatar

    27 lutego jadę do ośrodka medytacyjnego techniką Vipassana na 10 dni. Medytuję od pół roku, minimum godzinę dziennie, mam też doświadczenia z psychodelikami, komorami deprywacyjnymi i innymi pojebanymi rzeczami. Teraz chcę wejść na trochę wyższy poziom bez wspomagania się żadnymi środkami i sprawdzić czy dam radę wytrzymać 10 dni medytacji non stop.

    Z grubsza wygląda to tak, że na kursie jest 60 facetów i 60 kobiet. Każdy dostaje swój pokój. Przy wejściu zostaje ci zabrana cała elektronika a przez te 10 dni:

    - nie masz kontaktu ze światem zewnętrznym
    - nie możesz nic mówić
    - nie możesz nikogo dotykać
    - nie możesz na nikogo patrzeć
    - jesz w wyznaczonych porach
    - 0 używek
    - nie możesz pisać, słuchać muzyki, czytać książek

    Tak wygląda rozkład każdego dnia:
    4:00 Pobudka
    4:30-6:30 Medytacja w sali medytacyjnej lub pokojach
    6:30-8:00 Przerwa na śniadanie
    8:00-9:00 Medytacja grupowa w sali medytacyjnej
    9:00-11:00 Medytacja w sali lub pokojach w zależności od instrukcji przekazanej przez nauczyciela
    11:00-12:00 Przerwa na obiad
    12.00-13.00 Odpoczynek i indywidualne rozmowy z nauczycielem
    13.00-14.30 Medytacja w sali medytacyjnej lub pokojach
    14.30-15.30 Medytacja grupowa w sali medytacyjnej
    15.30-17.00 Medytacja w sali lub pokojach w zależności od instrukcji przekazanej przez nauczyciela
    17.00-18.00 Przerwa na herbatę
    18.00-19.00 Medytacja grupowa w sali medytacyjnej
    19.00-20.15 Wieczorny wykład
    20.15-21.00 Medytacja grupowa w sali medytacyjnej
    21.00-21.30 Czas na pytania w sali medytacyjnej
    21.30 Gaszenie świateł. Czas na odpoczynek w pokojach.

    Kurs jest całkowicie darmowy i utrzymuje się z dobrowolnych datków. Nie można wpłacić pieniędzy na rzecz ośrodka jeśli nie odbyło się ani jednej wizyty w nim.

    https://www.pallava.dhamma.org/pl/spis-tresci/regulamin-kursu/ - pełny regulamin kursu

    Jak wrócę (a może o ile wrócę) to opiszę swoje wrażenia, jeśli jesteś chętny do przeczytania co i jak to zaplusuj wpis a cię zawołam w marcu.

    #medytacja #vipassana #rozwojosobisty #truestory #mindfulness
    pokaż całość

    odpowiedzi (174)