public async Task <ICollection <ClanObject> > Load(string listName) { Errors = new List <string>(); Objects = new List <ClanObject>(); var tagDict = new Dictionary <string, string>(); foreach (var listOptions in options.Value.Where(l => l.Code == listName)) { var data = await googleSheets.Get(listOptions.SheetId, "ROWS", listOptions.Range); if (data != null) { foreach (var row in data) { string tag = null; string name = null; if (row.Count > listOptions.TagColumn && listOptions.TagColumn >= 0) { tag = (string)row[listOptions.TagColumn]; } if (row.Count > listOptions.NameColumn && listOptions.NameColumn >= 0) { name = Convert.ToString(row[listOptions.NameColumn]); } if (tag != null && tag.StartsWith("#")) { tag = tag.ToUpperInvariant(); tag = tag.Replace("O", "0"); if (tagDict.TryGetValue(tag, out string existingName)) { Errors.Add(string.Format("Duplicate tag {0} for {1} ({2}) and {3}", tag, name, listOptions.Code, existingName)); } else { tagDict.Add(tag, string.Format("{0} ({1})", name, listOptions.Code)); Objects.Add(new ClanObject { Tag = tag, Name = name, Group = listOptions.Code }); } } } } if (Objects.Count == 0) { Errors.Add(string.Format("{0}-list is empty", listOptions.Code)); } } return(Objects); }