Вы можете использовать ключевое слово dynamic
dynamic obj = JsonConvert.DeserializeObject(json);
Console.WriteLine(obj.unashamedohio.summonerLevel);
public T RandomEnum<T>()
{
T[] values = (T[]) Enum.GetValues(typeof(T));
return values[new Random().Next(0,values.Length)];
}
Спасибо @ [Marc Gravell] за сообщение о том, что max в Random.Next (min, max) является эксклюзивным.
Ответ Marxidad хорош (обратите внимание, что Вам только нужно Next(0,values.Length)
, так как верхняя граница эксклюзивна) - но не упустите синхронизацию. Если Вы сделаете это в жестком цикле, Вы получите много повторений. Для создания его более случайным рассмотрите хранение Случайного объекта в поле - т.е.
private Random rand = new Random();
public T RandomEnum<T>()
{
T[] values = (T[]) Enum.GetValues(typeof(T));
return values[rand.Next(0,values.Length)];
}
, Если это будет статическое поле, необходимо будет синхронизировать доступ.
Silverlight не имеет GetValues (), но вы можете использовать отражение, чтобы получить случайное перечисление.
private Random rnd = new Random();
public T RndEnum<T>()
{
FieldInfo[] fields = typeof(T).GetFields(BindingFlags.Static | BindingFlags.Public);
int index = rnd.Next(fields.Length);
return (T) Enum.Parse(typeof(T), fields[index].Name, false);
}
Я не уверен в c#, но другие языки позволяют разрывы в перечислимых значениях. Составлять это:
enum A {b=0,c=2,d=3,e=42};
switch(rand.Next(0,4))
{
case 0: return A.b;
case 1: return A.c;
case 2: return A.d;
case 3: return A.e;
}
майор вниз сторона совершенствует его!
Не рядом как аккуратный, но более корректный в том угловом случае.
<час>, Как указано, примеры от вышеупомянутого индекса в массив допустимых значений и это разбирается в нем. OTOH, который некоторые языки ( кашель кашель D ) не обеспечивают тому массиву так вышеупомянутое, достаточно полезен, что я оставлю его так или иначе.
Enum.Parse(typeof(SomeEnum), mRandom.Next(min, max).ToString()).ToString()