如何将VB.Net的CType()转换为C#

时间:2012-09-03 14:12:33

标签: c# .net vb.net casting

我在VB NET中有这段代码:

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

C#中的适当代码是什么?

提前谢谢。

4 个答案:

答案 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"));
}