Exemple #1
0
        private static ParameterKey GetOrCreateComposedKey(ref ParameterComposedKey composedKey)
        {
            ParameterKey result;

            lock (composedKeys)
            {
                if (!composedKeys.TryGetValue(composedKey, out result))
                {
                    var keyName = composedKey.Key.Name;

                    var builder = new StringBuilder(keyName.Length + 10 + composedKey.Name.Length);
                    builder.Append(keyName);
                    builder.Append('.');
                    builder.Append(composedKey.Name);
                    if (composedKey.Indexer >= 0)
                    {
                        builder.Append('[');
                        builder.Append(composedKey.Indexer);
                        builder.Append(']');
                    }

                    result = ComposeWith(composedKey.Key, builder);
                    composedKeys.Add(composedKey, result);
                }
            }
            return(result);
        }
Exemple #2
0
        /// <summary>
        /// Compose a key with a name and index (e.g  if key is `MyKey.MyKeyName` and name is `MyName` and index is 5, the result key will be `MyKey.MyKeyName.MyName[5]`)
        /// </summary>
        /// <typeparam name="T">Type of the key value</typeparam>
        /// <param name="key">The key.</param>
        /// <param name="name">The name to append to the key.</param>
        /// <param name="index">The index.</param>
        /// <returns>T.</returns>
        /// <exception cref="System.ArgumentNullException">
        /// key
        /// or
        /// name
        /// </exception>
        /// <exception cref="System.ArgumentOutOfRangeException">index;Must be >= 0</exception>
        public static T ComposeIndexer <T>(this T key, string name, int index) where T : ParameterKey
        {
            if (key == null)
            {
                throw new ArgumentNullException("key");
            }
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            var composedKey = new ParameterComposedKey(key, name, index);

            return((T)GetOrCreateComposedKey(ref composedKey));
        }