2012-09-03 12 views

Odpowiedz

19

w VB.NET CType(object, type) rzuca obiektu do określonego rodzaju.

Istnieją dwa sposoby, aby tego dokonać w C#:

Bitmap image = pbImageHolder.Image as Bitmap; 
image.SetPixel(curPoint.X, curPoint.Y, Color.Purple); 

lub

Bitmap image = (Bitmap)(pbImageHolder.Image); 
image.SetPixel(curPoint.X, curPoint.Y, Color.Purple); 
+3

1) Podana przez Ciebie pierwsza opcja wymaga sprawdzenia wartości null; "as" nie jest przeznaczone do przypadków użycia bez sprawdzenia wyniku zerowego i nie może być pozycjonowane jako bezpośredni odpowiednik operatora VB 'CType'; 2) Druga opcja ma niepotrzebne nawiasy, zobacz odpowiedź na twój komentarz poniżej. Tak więc, przegłosowano, zwłaszcza w odniesieniu do niedbałego użycia. – Dennis

+0

Jak powiedział Dennis, nie używaj "jak" w takich przypadkach. Mogłoby to prowadzić do nieujawnionego 'NullReferenceException'. –

+0

@Dennis to dobra rada, ale nie musisz się zgodzić tylko ze względu na to. Odpowiedź jest nadal użyteczna – SysDragon

9
((Bitmap)pbImageHolder.Image).SetPixel(curPoint.X, curPoint.Y, Color.Purple) 
+0

Z '((Bitmapa) pbImageHolder.Image)' twoją próbą rzucania pbImageHolder do Bitmapy, która prawdopodobnie nie zadziała. Następujący obraz zostanie rzucony: '(Bitmap) (pbImageHolder.Image)' –

+4

@DennisTraub: mylisz się, zobacz specyfikację języka C#, rozdział 7.3.1 "Priorytet operatora i powiązania" (http://go.microsoft. com/fwlink /? LinkId = 199552). Operator dostępu użytkownika "." ma pierwszeństwo nad operatorem rzutowania, więc wyrażenia, takie jak '(TypeWichCastTo) variable.Member' ocenią w ten sposób: 1) najpierw dostęp do' Członka '' zmiennej'; 2) następnie wyślij 'Member' na' TypeWichCastTo'. – Dennis

+1

Właściwie masz rację. Dzięki za wyjaśnienie. –