これを正しく行う方法については、私は困惑しています。 thisが見つかりました。これが重複している可能性があるかどうかはわかりません。C# - EnumRandomizerクラスの作成
私は最初からやります。
public class Foo
{
public static Random rand = new Random();
public static FooEnum[] values;
public static FooEnum GetRandomFoo()
{
values = (FooEnum[]) Enum.GetValues(typeof(FooEnum));
return values[rand.Next(0, Values.Length)];
}
public enum FooEnum { A, B, C}
}
これは非常によく働いていた:私は、私は次のように見えたという列挙型を、ランダム化のために特別にクラスを作成することにより、投稿のスレッドで与えられた提案を実装することができました。唯一の問題は、明らかに私の列挙型の上にクラスをラップしてしまったため、同じことを言うために2つの異なる方法が必要でした(クラスGenderはenum Sexをラップします;クラスWeaponはEnum WeaponTypeなどをラップします)。
これは、同じことについて何度も何度も再実装しなければならないコードを書く必要があるため、非効率的でした。したがって、これに対する明らかな解決策は、任意の種類の列挙型を取り、以下の方法を使用してランダム化するランダムな列挙型クラスを作成することです。
誰もがこれを行う方法上の任意のアイデアを持っていますか?私の方法はあまり働いていません。
public class EnumRandomizer
{
private Random rand;
private Type[] values;
private int randomizerId;
private static int randomizerCount = 0;
public EnumRandomizer()
{
rand = new Random();
randomizerId = randomizerCount;
randomizerCount++;
}
public Type RandomEnum(Type type)
{
values = (Type[]) Enum.GetValues(type);
return values[rand.Next(0, values.Length)];
}
}
すべてのテイク?
Enum.GetValuesの戻り値をキャストする必要があります。 – heisenberg
ありがとうございます。このような動作を実装する方法の簡単な例を私に見せてもらえますか?私はジェネリックスにはまったく新しく、そのメソッドをどのように呼び出すべきかわかりません。 – zeboidlund
@kekekelaいいキャッチです。更新されます。 – jdmichal