using System.Collections.Generic;
private static readonly Random _r = new Random();
private static IEnumerable<(T, T)> FunkyLotto<T>(IEnumerable<T> source)
var pool = source.ToList();
var iteration = pool.ToList();
foreach (var item in iteration)
if (pool.Count == 2 && pool.IndexOf(item) >= 0)
choice = (pool.IndexOf(item) + 1) % pool.Count;
choice = _r.Next(0, pool.Count);
choice = Equals(item, pool[choice]) ? (choice + 1) % pool.Count : choice;
yield return (item, pool[choice]);
public static void Main()
var list = new[]{"Joe", "John", "Chris", "Henry", "Tom", "Patrick"};
foreach (var result in FunkyLotto(list))
Console.WriteLine(result);