protected T ListItem <T>(int index, MakeListConstructor <T> make, MakeListGetCount count, MakeListGetItem <T> get) { if (index < 0) { throw new ArgumentOutOfRangeException("index < 0"); } IntPtr p = Handle; int n = count(p); if (index >= n) { throw new ArgumentOutOfRangeException("index >= " + n); } return(make(get(p, index))); }
protected List <T> MakeList <T>(MakeListConstructor <T> make, MakeListGetCount count, MakeListGetItem <T> get) { ThrowHelper.ThrowIfNull(count, "count"); ThrowHelper.ThrowIfNull(get, "get"); IntPtr p = Handle; int n = count(p); if (n == 0) { return(new List <T>()); } List <T> items = new List <T>(n); for (int i = 0; i < n; ++i) { items.Add(make(get(p, i))); } return(items); }