diff --git a/.editorconfig b/.editorconfig index 27d25cc5e4..5d2fd31e31 100644 --- a/.editorconfig +++ b/.editorconfig @@ -612,6 +612,10 @@ dotnet_code_quality.api_surface = all ### Design Rules ### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/design-warnings +# Collections should implement generic interface. +#dotnet_code_quality.CA1010.additional_required_generic_interfaces = +dotnet_diagnostic.CA1010.severity = warning + # Provide ObsoleteAttribute message. dotnet_diagnostic.CA1041.severity = warning diff --git a/OpenRA.Game/Map/ActorReference.cs b/OpenRA.Game/Map/ActorReference.cs index 13029a0fe5..180a7847c7 100644 --- a/OpenRA.Game/Map/ActorReference.cs +++ b/OpenRA.Game/Map/ActorReference.cs @@ -22,7 +22,7 @@ namespace OpenRA { public interface ISuppressInitExport { } - public class ActorReference : IEnumerable + public class ActorReference : IEnumerable { public string Type; readonly Lazy initDict; @@ -104,7 +104,9 @@ namespace OpenRA return ret; } - public IEnumerator GetEnumerator() { return initDict.Value.GetEnumerator(); } + public IEnumerator GetEnumerator() { return initDict.Value.GetEnumerator(); } + + IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public ActorReference Clone() { diff --git a/OpenRA.Game/Primitives/TypeDictionary.cs b/OpenRA.Game/Primitives/TypeDictionary.cs index f200fc45b9..4adcff58c8 100644 --- a/OpenRA.Game/Primitives/TypeDictionary.cs +++ b/OpenRA.Game/Primitives/TypeDictionary.cs @@ -16,7 +16,7 @@ using System.Linq; namespace OpenRA.Primitives { - public class TypeDictionary : IEnumerable + public class TypeDictionary : IEnumerable { static readonly Func> CreateList = type => new List(); readonly Dictionary> data = new(); @@ -105,10 +105,15 @@ namespace OpenRA.Primitives objs.TrimExcess(); } - public IEnumerator GetEnumerator() + public IEnumerator GetEnumerator() { return WithInterface().GetEnumerator(); } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } } public static class TypeExts diff --git a/OpenRA.Game/Support/HttpQueryBuilder.cs b/OpenRA.Game/Support/HttpQueryBuilder.cs index 8c1016fb3d..eef28a2d76 100644 --- a/OpenRA.Game/Support/HttpQueryBuilder.cs +++ b/OpenRA.Game/Support/HttpQueryBuilder.cs @@ -16,10 +16,10 @@ using System.Text; namespace OpenRA.Support { - public class HttpQueryBuilder : IEnumerable + public class HttpQueryBuilder : IEnumerable> { readonly string url; - readonly List parameters = new(); + readonly List> parameters = new(); public HttpQueryBuilder(string url) { @@ -28,11 +28,9 @@ namespace OpenRA.Support public void Add(string name, object value) { - parameters.Add(new Parameter - { - Name = name, - Value = Uri.EscapeDataString(value.ToString()) - }); + parameters.Add(KeyValuePair.Create( + name, + Uri.EscapeDataString(value.ToString()))); } public override string ToString() @@ -42,20 +40,19 @@ namespace OpenRA.Support builder.Append("?"); foreach (var parameter in parameters) - builder.Append($"{parameter.Name}={parameter.Value}&"); + builder.Append($"{parameter.Key}={parameter.Value}&"); return builder.ToString(); } - class Parameter + public IEnumerator> GetEnumerator() { - public string Name { get; set; } - public string Value { get; set; } + return parameters.GetEnumerator(); } - public IEnumerator GetEnumerator() + IEnumerator IEnumerable.GetEnumerator() { - throw new NotImplementedException(); + return GetEnumerator(); } } }