using System.Collections.Generic;
public static void Main()
var db = RobloxDatabase.RobloxUniverses;
var connectionString = db.GetConnectionString();
Console.WriteLine(connectionString);
connectionString = db.GetConnectionString();
Console.WriteLine(connectionString);
db = RobloxDatabase.RobloxBilling;
connectionString = db.GetConnectionString();
Console.WriteLine(connectionString);
public string RobloxBilling { get { return "RobloxBilling Connection String"; } }
public string RobloxVoting { get { return "RobloxVoting Connection String"; } }
public string RobloxUniverses { get { return "RobloxUniverses Connection String"; } }
public enum RobloxDatabase
public static class Extensions
private static IDictionary<RobloxDatabase, Func<Settings, string>> _DelegateCache = new Dictionary<RobloxDatabase, Func<Settings, string>>();
private static Settings _Settings = new Settings();
private static Type _SettingsType = typeof(Settings);
public static string GetConnectionString(this RobloxDatabase db)
Func<Settings, string> getter;
if (!_DelegateCache.TryGetValue(db, out getter))
Console.WriteLine("Cache miss for {0}", db);
var propertyInfo = _SettingsType.GetProperty(db.ToString());
var getMethodInfo = propertyInfo.GetGetMethod();
getter = (Func<Settings, string>)getMethodInfo.CreateDelegate(typeof(Func<Settings, string>));
_DelegateCache.Add(db, getter);
Console.WriteLine("Cache hit for {0}", db);
return getter(_Settings);