私はVB.NETにこのコードセグメントを持っています:
CType(pbImageHolder.Image, Bitmap).SetPixel(curPoint.X, curPoint.Y, Color.Purple)
C#の適切なコードは何ですか?
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);
((Bitmap)pbImageHolder.Image).SetPixel(curPoint.X, curPoint.Y, Color.Purple)
こんにちはこれはVBをC#コードに変換した後のコードです:
((Bitmap)pbImageHolder.Image).SetPixel(curPoint.X, curPoint.Y, Color.Purple);
また、VBからC#へのコード変換、およびその逆の場合は、次のリンクを参照してください:http ://www.developerfusion.com/tools/convert/vb-to-csharp/
このテーマに関する答えがどれも正しくないことに驚いたので、ここに投稿することにしました。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"));
}