using System;
using System.Linq;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Reflection;
public static class Ext {
public static IList<T> GetItems<T>(this ReadOnlyCollection<T> roc) {
var prop = roc.GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static ).FirstOrDefault(x => x.Name.Contains("Items"));
return (IList<T>)prop.GetValue(roc, null);
}
}
public class Test
{
static List<int> l = new List<int> {1,2,3};
static ReadOnlyCollection<int> Get()
{
return new ReadOnlyCollection<int>(l);
}
public static void Main()
{
var list = Get().GetItems();
list.Add(3);
Console.WriteLine(l.Count());
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5PYmplY3RNb2RlbDsKdXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247CgpwdWJsaWMgc3RhdGljIGNsYXNzIEV4dCB7CglwdWJsaWMgc3RhdGljIElMaXN0PFQ+IEdldEl0ZW1zPFQ+KHRoaXMgUmVhZE9ubHlDb2xsZWN0aW9uPFQ+IHJvYykgewoJCXZhciBwcm9wID0gcm9jLkdldFR5cGUoKS5HZXRQcm9wZXJ0aWVzKEJpbmRpbmdGbGFncy5Ob25QdWJsaWMgfCBCaW5kaW5nRmxhZ3MuSW5zdGFuY2UgfCBCaW5kaW5nRmxhZ3MuU3RhdGljICkuRmlyc3RPckRlZmF1bHQoeCA9PiB4Lk5hbWUuQ29udGFpbnMoIkl0ZW1zIikpOwoJCXJldHVybiAoSUxpc3Q8VD4pcHJvcC5HZXRWYWx1ZShyb2MsIG51bGwpOwoJfQp9CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglzdGF0aWMgTGlzdDxpbnQ+IGwgPSBuZXcgTGlzdDxpbnQ+IHsxLDIsM307CglzdGF0aWMgUmVhZE9ubHlDb2xsZWN0aW9uPGludD4gR2V0KCkKCXsKCQlyZXR1cm4gbmV3IFJlYWRPbmx5Q29sbGVjdGlvbjxpbnQ+KGwpOwoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJdmFyIGxpc3QgPSBHZXQoKS5HZXRJdGVtcygpOwoJCWxpc3QuQWRkKDMpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKGwuQ291bnQoKSk7Cgl9Cn0=