• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

nieprawidłowe rzutowanie. dlaczego?

VPS Starter Arubacloud
0 głosów
2,146 wizyt
pytanie zadane 29 kwietnia 2018 w C# przez DODO Bywalec (2,950 p.)

Witam.

mam taki kod:

myClass c = new myClass();

if((int)c == 0) // tu jest błąd
{
    cośtam
}

dlaczego wyskakuje mi błąd „Określone rzutowanie jest nieprawidłowe.”, skoro w klasie mam napisane:

public static implicit operator myClass(int i)
{
    return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 29 kwietnia 2018 przez adrian17 Ekspert (349,240 p.)

public static implicit operator myClass(int i)

To zamienia int na myClass. Raczej chcesz w drugą stronę?

komentarz 30 kwietnia 2018 przez DODO Bywalec (2,950 p.)

dzięki,

a jeśli mam obiekty tej klasy w tablicy i zapisuję

Console.WriteLine((int)Arr[3]);

To wywala mi ten sam błąd?

komentarz 30 kwietnia 2018 przez adrian17 Ekspert (349,240 p.)
Nie zrozumiałem. Pokaż nowy kod (cały).
komentarz 3 maja 2018 przez DODO Bywalec (2,950 p.)

Dobra, zmieniłem rozwiązanie, ale to było mniej-więcej tak:

public object[] map = new object[5] { new myClass, new myClass, new myClass, new myClass, new myClass};

// ...

int value = (int)map[2];

i wywalało mi błąd

komentarz 3 maja 2018 przez adrian17 Ekspert (349,240 p.)
Dlaczego użyłeś jako typ `object[]`, a nie `MyClass[]`?
komentarz 5 maja 2018 przez DODO Bywalec (2,950 p.)
bo tablica przechowuje też inne typy danych (w trakcie kodu inne typy zastępują niektóre komórki tablicy)
komentarz 5 maja 2018 przez adrian17 Ekspert (349,240 p.)

bo tablica przechowuje też inne typy danych

No to kompilator nie ma gwarancji, że każdy typ w tablicy jest konwertowalny do `int`.

Zazwyczaj trzymanie mocno różnych typów w tablicach jest dość podejrzane.

0 głosów
odpowiedź 29 kwietnia 2018 przez PięćCzySześć Użytkownik (770 p.)
impilicit mówi że masz niejawnie czyli możesz zrobić c==0 (teorietycznie) jak dasz expilicit to wtedy dajesz ((int)c) == 0

Podobne pytania

0 głosów
1 odpowiedź 257 wizyt
0 głosów
2 odpowiedzi 861 wizyt
pytanie zadane 11 grudnia 2019 w C i C++ przez amtrax Dyskutant (9,630 p.)
0 głosów
1 odpowiedź 358 wizyt
pytanie zadane 29 kwietnia 2018 w C# przez DODO Bywalec (2,950 p.)

92,973 zapytań

141,936 odpowiedzi

321,171 komentarzy

62,301 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...