J'ai ce segment de code dans vb.net:
CType(pbImageHolder.Image, Bitmap).SetPixel(curPoint.X, curPoint.Y, Color.Purple)
p>Quel est le code approprié en C #? p> p>
4 Réponses :
((Bitmap)pbImageHolder.Image).SetPixel(curPoint.X, curPoint.Y, Color.Purple)
Avec (((bitmap) pbimageholder.Image) code> Votre tentative de lancer PBIMageholder au bitmap, ce qui ne fonctionnera probablement pas. Ce qui suit va jeter l'image:
(bitmap) (pbimageholder.Image) code>
@ Dennistraub: Vous avez tort, voir C # Spécification de la langue, section 7.3.1 "Prédication de l'opérateur et associativité" ( go.microsoft.com/fwlink/?LinkID=199552 ). Opérateur d'accès membre "." a la priorité sur l'opérateur de distribution, donc, des expressions telles que (typewichcasto) variable.Member code> évaluera de cette façon: 1) Accès
membre code> de
variable code> d'abord; 2) Ensuite, lancez
membre code> sur
typeewichcastto code>.
dans vb.net Il y a deux façons de l'accomplir en C #: P> CTYPE (objet, type) code> jette un objet à un type spécifique.
Bitmap image = (Bitmap)(pbImageHolder.Image);
image.SetPixel(curPoint.X, curPoint.Y, Color.Purple);
1) La première option que vous avez fournie nécessite fortement une vérification nulle; comme code> n'est pas destiné aux cas d'utilisation sans vérification null du résultat et ne peut pas être positionné comme équivalent direct de VB
CTYPE code> opérateur; 2) La deuxième option a des supports inutiles, voir la réponse à votre commentaire ci-dessous. Donc, vécu en bas, surtout pour
comme code> Utilisation de négligence.
Comme Dennis dit, n'utilisez pas comme code> dans des cas comme celui-ci. Cela pourrait conduire à un
NullReferenceException code> code>.
@Dennis est un bon conseil, mais vous n'avez pas besoin de bowervote uniquement à cause de cela. La réponse est toujours utile
CTYPE code> ne jette pas d'objet, il le convertit.
DirectCast code> ou
trycast code> sont les opérations de coulée. Par exemple,
atteger = ctype ("1", entier) code> est valide, mais
sombre i comme integer = DirectCast ("1", entier) code> n'est pas
HI Ceci est le code après la conversion VB sur C # CODE:
((Bitmap)pbImageHolder.Image).SetPixel(curPoint.X, curPoint.Y, Color.Purple);
Je suis surpris que aucune des réponses de ce sujet ne soit correcte, j'ai donc décidé de poster ici. Vous pouvez vérifier ce qui se passe en décompilant un programme VB.NET. La réponse dépend du type converti en.
pour les types de référence: p>
pour les structures: p> pour les mises prédéfinies: p> qui ressemble à ceci: p> DIM VALEUR = CTYPE (x, référencétype) CODE> P>
VALEUR VAR = (référencétype) x; code> p>
DIM VALEUR = CTYPE (x, Structype) code> P>
valeur var = (x! = null)? ((Structype) x): défaut (Structype); code> p>
DIM VALEUR = CDBL (x) CODE> p>
varume = microsoft.visalbasic.compilerservices.conversions.todouble (x) code> p>
internal static double ToDouble(object Value, NumberFormatInfo NumberFormat)
{
if (Value == null)
{
return 0.0;
}
IConvertible convertible = Value as IConvertible;
if (convertible != null)
{
switch (convertible.GetTypeCode())
{
case TypeCode.Boolean:
if (Value is bool)
{
return 0 - (((bool)Value) ? 1 : 0);
}
return 0 - (convertible.ToBoolean(null) ? 1 : 0);
case TypeCode.SByte:
if (Value is sbyte)
{
return (sbyte)Value;
}
return convertible.ToSByte(null);
case TypeCode.Byte:
if (Value is byte)
{
return (int)(byte)Value;
}
return (int)convertible.ToByte(null);
case TypeCode.Int16:
if (Value is short)
{
return (short)Value;
}
return convertible.ToInt16(null);
case TypeCode.UInt16:
if (Value is ushort)
{
return (int)(ushort)Value;
}
return (int)convertible.ToUInt16(null);
case TypeCode.Int32:
if (Value is int)
{
return (int)Value;
}
return convertible.ToInt32(null);
case TypeCode.UInt32:
if (!(Value is uint))
{
return convertible.ToUInt32(null);
}
return (uint)Value;
case TypeCode.Int64:
if (Value is long)
{
return (long)Value;
}
return convertible.ToInt64(null);
case TypeCode.UInt64:
if (!(Value is ulong))
{
return convertible.ToUInt64(null);
}
return (ulong)Value;
case TypeCode.Decimal:
if (Value is decimal)
{
return convertible.ToDouble(null);
}
return Convert.ToDouble(convertible.ToDecimal(null));
case TypeCode.Single:
if (Value is float)
{
return (float)Value;
}
return convertible.ToSingle(null);
case TypeCode.Double:
if (Value is double)
{
return (double)Value;
}
return convertible.ToDouble(null);
case TypeCode.String:
return ToDouble(convertible.ToString(null), NumberFormat);
}
}
throw new InvalidCastException(Utils.GetResourceString("InvalidCast_FromTo", Utils.VBFriendlyName(Value), "Double"));
}