10

私はVB.NETにこのコードセグメントを持っています:

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

C#の適切なコードは何ですか?

4

4 に答える 4

24

VB.NetではCType(object, type)、オブジェクトを特定のタイプにキャストします。

C#でこれを実現するには2つの方法があります。

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);
于 2012-09-03T14:13:50.783 に答える
9
((Bitmap)pbImageHolder.Image).SetPixel(curPoint.X, curPoint.Y, Color.Purple)
于 2012-09-03T14:13:42.717 に答える
2

こんにちはこれはVBをC#コードに変換した後のコードです:

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

また、VBからC#へのコード変換、およびその逆の場合は、次のリンクを参照してください:http ://www.developerfusion.com/tools/convert/vb-to-csharp/

于 2012-09-11T10:40:51.897 に答える
-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"));
}
于 2020-10-01T07:30:11.117 に答える