using System.Collections.Generic;
using System.Diagnostics;
public static void Main()
for (int i = 0; i < 100; i++)
private static void Test()
var commonObject = new RandomObject()
{Name = "Common", Weight = 60};
var rareObject = new RandomObject()
{Name = "Rare", Weight = 10};
var LegendaryObject = new RandomObject()
{Name = "Legendary", Weight = 5};
var randomPool = new List<RandomObject>()
{commonObject, rareObject, LegendaryObject};
var randomPicker = new RandomPicker(randomPool);
var pickedObject = randomPicker.PickRandomObject();
Debug.Assert(pickedObject != null);
Console.WriteLine(pickedObject.Name);
public class RandomPicker
private List<RandomObject> objectPool = new List<RandomObject>();
public RandomPicker(List<RandomObject> objectPool)
this.objectPool = objectPool;
public RandomObject PickRandomObject()
RandomObject result = null;
foreach (var obj in objectPool)
overalWeight += obj.Weight;
var roll = Rngesus.rng.Next(0, overalWeight);
foreach (var obj in objectPool)
if (roll < obj.Weight + offset)
public class RandomObject
public static class Rngesus
public static Random rng = new Random();