public static IEnumerable <IDimensionValue> GetDimensionValues(IVector v1, Func <double, double> convert = null)
 {
     return(v1.DimensionValues.Select(dv =>
     {
         double value = convert == null ? dv.Value : convert(dv.Value);
         DimensionValue result = new DimensionValue(dv.DimensionKey, value);
         return result;
     }));
 }
        public async Task <IVector> GetVector(T input, IReadOnlyDictionary <IDimensionKey, Func <T, Task <double> > > conversionFuncs)
        {
            var dimensionValueTasks = conversionFuncs.Select(async kvp =>
            {
                var value          = await kvp.Value(input).ConfigureAwait(false);
                var dimensionValue = new DimensionValue(kvp.Key, value);
                return(dimensionValue);
            });
            var dimensionValues = await Task.WhenAll(dimensionValueTasks).ConfigureAwait(false);

            var vector = new Vector(dimensionValues);

            return(vector);
        }