| File: Parameters\ParameterDefinitionSet.cs | Web Access |
| Project: src\sdk\src\TemplateEngine\Microsoft.TemplateEngine.Abstractions\Microsoft.TemplateEngine.Abstractions.csproj (Microsoft.TemplateEngine.Abstractions) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections; namespace Microsoft.TemplateEngine.Abstractions.Parameters { /// <inheritdoc /> public class ParameterDefinitionSet : IParameterDefinitionSet { /// <summary> /// Empty descriptor set. /// </summary> public static readonly IParameterDefinitionSet Empty = new ParameterDefinitionSet((IEnumerable<ITemplateParameter>?)null); private readonly IReadOnlyDictionary<string, ITemplateParameter> _parameters; /// <summary> /// Initializes new instance of the <see cref="ParameterDefinitionSet"/> type. /// </summary> /// <param name="parameters"></param> public ParameterDefinitionSet(IReadOnlyDictionary<string, ITemplateParameter>? parameters) => _parameters = parameters ?? new Dictionary<string, ITemplateParameter>(); /// <summary> /// Initializes new instance of the <see cref="ParameterDefinitionSet"/> type. /// </summary> /// <param name="parameters"></param> public ParameterDefinitionSet(IEnumerable<ITemplateParameter>? parameters) : this(parameters?.ToDictionary(p => p.Name, p => p)) { } /// <summary> /// Initializes new instance of the <see cref="ParameterDefinitionSet"/> type. /// </summary> /// <param name="other">Instance to be cloned.</param> public ParameterDefinitionSet(IParameterDefinitionSet other) : this(other.AsReadonlyDictionary()) { } /// <inheritdoc /> public IEnumerable<string> Keys => _parameters.Keys; /// <inheritdoc /> public IEnumerable<ITemplateParameter> Values => _parameters.Values; /// <inheritdoc /> public int Count => _parameters.Count; /// <inheritdoc /> public ITemplateParameter this[string key] => _parameters[key]; /// <inheritdoc /> public ITemplateParameter this[int index] => _parameters.Values.ElementAt(index); /// <inheritdoc /> public IReadOnlyDictionary<string, ITemplateParameter> AsReadonlyDictionary() => _parameters; /// <inheritdoc /> public bool ContainsKey(string key) => _parameters.ContainsKey(key); /// <inheritdoc /> public IEnumerator<ITemplateParameter> GetEnumerator() => _parameters.Values.GetEnumerator(); /// <inheritdoc /> public bool TryGetValue(string key, out ITemplateParameter value) => _parameters.TryGetValue(key, out value); /// <inheritdoc /> IEnumerator IEnumerable.GetEnumerator() => _parameters.Values.GetEnumerator(); } }