我在VB NET
中有这段代码:
CType(pbImageHolder.Image, Bitmap).SetPixel(curPoint.X, curPoint.Y, Color.Purple)
C#
中的适当代码是什么?
提前谢谢。
答案 0 :(得分:20)
在VB.Net中CType(object, type)
将对象强制转换为特定类型。
在C#中有两种方法可以实现这一点:
Bitmap image = pbImageHolder.Image as Bitmap;
image.SetPixel(curPoint.X, curPoint.Y, Color.Purple);
或
Bitmap image = (Bitmap)(pbImageHolder.Image);
image.SetPixel(curPoint.X, curPoint.Y, Color.Purple);
答案 1 :(得分:9)
((Bitmap)pbImageHolder.Image).SetPixel(curPoint.X, curPoint.Y, Color.Purple)
答案 2 :(得分:2)
嗨,这是将VB转换为C#代码后的代码:
((Bitmap)pbImageHolder.Image).SetPixel(curPoint.X, curPoint.Y, Color.Purple);
如果您想要从VB到C#的代码转换,请反过来查看以下链接:http://www.developerfusion.com/tools/convert/vb-to-csharp/
答案 3 :(得分:-1)
令我惊讶的是,关于该主题的答案均不正确,因此我决定在此处发布。您可以通过反编译VB.NET程序来验证正在发生的情况。答案取决于要转换为的类型。
对于参考类型:
Dim value = CType(x, ReferenceType)
var value = (ReferenceType)x;
对于结构:
Dim value = CType(x, StructType)
var value = (x != null) ? ((StructType)x) : default(StructType);
对于预定义的演员表:
Dim value = CDbl(x)
var value = Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(x)
看起来像这样:
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"));
}