using System;
using System.Collections.Generic;
public abstract class BaseDBObject
{
public BaseObjectsList<BaseDBObject> ParentList { get; set; }
}
public class BaseObjectsList<T> /* : IEnumerable<T> */ where T : BaseDBObject
{
public List<T> ObjectsList { get; set; } = new List<T>();
internal void Fill<U>() where U : T, new()
{
ObjectsList.Clear();
ObjectsList.Add(new U());
}
}
public static class BaseObjectsListExt
{
public static void Fill<T>(this BaseObjectsList<T> list) where T : BaseDBObject, new()
{
list.Fill<T>();
}
}
public class Smth : BaseDBObject
{
}
public class Test
{
public static void Main()
{
var list = new BaseObjectsList<Smth>();
list.Fill();
Console.WriteLine(list.ObjectsList.Count);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKIApwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZURCT2JqZWN0CnsKCXB1YmxpYyBCYXNlT2JqZWN0c0xpc3Q8QmFzZURCT2JqZWN0PiBQYXJlbnRMaXN0IHsgZ2V0OyBzZXQ7IH0KfQogCnB1YmxpYyBjbGFzcyBCYXNlT2JqZWN0c0xpc3Q8VD4gLyogOiBJRW51bWVyYWJsZTxUPiAqLyB3aGVyZSBUIDogQmFzZURCT2JqZWN0CnsKCXB1YmxpYyBMaXN0PFQ+IE9iamVjdHNMaXN0IHsgZ2V0OyBzZXQ7IH0gPSBuZXcgTGlzdDxUPigpOwogCglpbnRlcm5hbCB2b2lkIEZpbGw8VT4oKSB3aGVyZSBVIDogVCwgbmV3KCkKICAgIHsKICAgICAgICBPYmplY3RzTGlzdC5DbGVhcigpOwogICAgICAgIE9iamVjdHNMaXN0LkFkZChuZXcgVSgpKTsKICAgIH0KfQoKcHVibGljIHN0YXRpYyBjbGFzcyBCYXNlT2JqZWN0c0xpc3RFeHQKewoJcHVibGljIHN0YXRpYyB2b2lkIEZpbGw8VD4odGhpcyBCYXNlT2JqZWN0c0xpc3Q8VD4gbGlzdCkgd2hlcmUgVCA6IEJhc2VEQk9iamVjdCwgbmV3KCkKCXsKCQlsaXN0LkZpbGw8VD4oKTsKCX0KfQoKcHVibGljIGNsYXNzIFNtdGggOiBCYXNlREJPYmplY3QKewp9CiAKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBsaXN0ID0gbmV3IEJhc2VPYmplY3RzTGlzdDxTbXRoPigpOwoJCWxpc3QuRmlsbCgpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKGxpc3QuT2JqZWN0c0xpc3QuQ291bnQpOwoJfQp9