私は C# でランダム値ジェネレーターを作成しています。このジェネリック関数は、渡された Type に応じてType
Bool
、Int64
、Int32
、の値を返す必要があります。Double
をメソッド パラメータとして渡すことはできSystem.Type
ますが、戻り値の型はどのように定義すればよいでしょうか。
例えば
GetRandomValueByType(TypeCode.Boolean)
<--- Boolean を返します
GetRandomValueByType(TypeCode.Double)
<--- Double を返します
GetRandomValueByType(TypeCode.Int32)
<--- Int32 を返します
などなど。
ありがとうございました!
- - - - - - - - - - - - - -編集 - - - - - - - - - - - ----------
これは私が使用したコードです:
if (ta.IsPrimitive || Type.GetTypeCode(ta) == TypeCode.String)
{
Random rnd = new Random();
var buffer = new byte[sizeof(Int64)];
rnd.NextBytes(buffer);
switch (Type.GetTypeCode(ta))
{
case TypeCode.Boolean:
oArr[ctr] = (rnd.Next(100) % 2 == 0);
break;
case TypeCode.Byte:
oArr[ctr] = buffer[0];
break;
case TypeCode.SByte:
oArr[ctr] = (sbyte)buffer[0];
break;
case TypeCode.Char:
oArr[ctr] = Convert.ToInt32(Math.Floor(26 * rnd.NextDouble() + 65));
break;
case TypeCode.Decimal:
oArr[ctr] = NextDecimal(rnd);
break;
case TypeCode.Double:
oArr[ctr] = rnd.NextDouble() * rnd.Next(Int32.MaxValue);
break;
case TypeCode.Single:
var buf = new byte[sizeof(Single)];
rnd.NextBytes(buf);
oArr[ctr] = BitConverter.ToSingle(buffer, 0);
break;
case TypeCode.Int32:
oArr[ctr] = rnd.Next(Int32.MinValue, Int32.MaxValue);
break;
case TypeCode.UInt32:
oArr[ctr] = rnd.Next(Int32.MaxValue) + (rnd.Next(100) % 2) * rnd.Next(Int32.MaxValue);
break;
case TypeCode.Int64:
oArr[ctr] = BitConverter.ToInt64(buffer, 0);
break;
case TypeCode.UInt64:
oArr[ctr] = BitConverter.ToUInt64(buffer, 0);
break;
case TypeCode.Int16:
oArr[ctr] = rnd.Next(Int16.MaxValue);
break;
case TypeCode.UInt16:
oArr[ctr] = rnd.Next(Int16.MaxValue) + (rnd.Next(100) % 2) * rnd.Next(Int16.MaxValue);
break;
case TypeCode.String:
oArr[ctr] = RandomString(rnd.Next(100));
break;
default:
oArr[ctr] = 0;
break;
}
}
else
{
oArr[ctr] = getInstance(dllFile, ta.Name);
}