2012-09-03 10 views
7

Ho questo segmento di codice in VB NET:Come traduco di VB.Net CType() per C#

CType(pbImageHolder.Image, Bitmap).SetPixel(curPoint.X, curPoint.Y, Color.Purple) 

ciò che è il codice appropriato in C#?

Grazie in anticipo.

risposta

19

In VB.Net CType(object, type) esegue il cast di un oggetto su un tipo specifico.

Ci sono due modi per ottenere questo in C#:

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

o

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

1) La prima opzione che hai fornito richiede fortemente il controllo nullo; 'as' non è inteso per casi d'uso senza controllo nullo del risultato e non può essere posizionato come equivalente diretto dell'operatore' CType' VB; 2) La seconda opzione ha parentesi non necessarie, vedi risposta al tuo commento qui sotto. Quindi, down-votato, soprattutto per l'uso negligente 'as'. – Dennis

+0

Come ha detto Dennis, non usare 'as' in casi come questo. Potrebbe portare a una "NullReferenceException" non informativa. –

+0

@Dennis è un buon consiglio ma non hai bisogno di downvotare solo per quello. La risposta è ancora utile – SysDragon

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

Con '((Bitmap) pbImageHolder.Image)' stai provando a lanciare pbImageHolder su Bitmap, che probabilmente non funzionerà. Quello che segue getterà l'immagine: '(Bitmap) (pbImageHolder.Image)' –

+4

@DennisTraub: ti sbagli, vedi le specifiche del linguaggio C#, sezione 7.3.1 "Priorità e associatività degli operatori" (http://go.microsoft. com/fwlink /? LinkId = 199552). Operatore di accesso membri "." ha la precedenza sull'operatore cast, quindi, espressioni come '(TypeWichCastTo) variable.Member' valuteranno in questo modo: 1) accedere' Member' di 'variable' prima; 2) quindi lanciare 'Member' su' TypeWichCastTo'. – Dennis

+1

In realtà hai ragione. Grazie per aver spiegato. –