using System.Collections.Generic;
public static void Main()
var resA = new List<ResultA>
new ResultA("a1", 23561),
new ResultA("a2", 34656),
new ResultA("a3", 15805),
new ResultA("a4", 35481),
var resB = new List<ResultB>
var normResA = ResultMethods.NormalizeAResult(resA);
var normResB = ResultMethods.NormalizeBResult(resB);
var normResGeneric = NormalizeResult(resA);
var normResExtension = resB.Normalize();
Console.WriteLine("Normalized List A:");
foreach (var r in normResA)
Console.WriteLine(r.TestName + " " + r.AverageTime);
Console.WriteLine("Normalized List B:");
foreach (var r in normResB)
Console.WriteLine(r.TestName + " " + r.AverageTime);
Console.WriteLine("Normalized Generic List:");
foreach (var r in normResGeneric)
Console.WriteLine(r.TestName + " " + r.AverageTime);
Console.WriteLine("Using extension method:");
foreach (var r in resB.Normalize())
Console.WriteLine(r.TestName + " " + r.AverageTime);
public static List<T> NormalizeResult<T>(List<T> result) where T : IHasAverageTime
var maxAverage = (double) result.Max(t => (double) t.AverageTime);
var pow = (int) Math.Log10(Math.Abs(maxAverage));
foreach (var res in result)
res.AverageTime = res.AverageTime / Math.Pow(10, pow);
public static class ResultMethods
public static List<ResultA> NormalizeAResult(List<ResultA> result)
var maxAverage = (double) result.Max(t => t.AverageTime);
var pow = (int) Math.Log10(Math.Abs(maxAverage));
foreach (var res in result)
res.AverageTime = res.AverageTime / Math.Pow(10, pow);
public static List<ResultB> NormalizeBResult(List<ResultB> result)
var maxAverage = (double) result.Max(t => t.AverageTime);
var pow = (int) Math.Log10(Math.Abs(maxAverage));
foreach (var res in result)
res.AverageTime = res.AverageTime / Math.Pow(10, pow);
public interface IHasAverageTime
double AverageTime { get; set; }
public class ResultA : IHasAverageTime
public string TestName { get; set; }
public double AverageTime { get; set; }
public string CustomA { get; set; }
public ResultA(string testName, double averageTime, string customA = "")
AverageTime = averageTime;
public class ResultB : IHasAverageTime
public string TestName { get; set; }
public double AverageTime { get; set; }
public string CustomB { get; set; }
public ResultB(string testName, double averageTime, string customB = "")
AverageTime = averageTime;
public static class ExtensionMethods
public static List<T> Normalize<T>(this List<T> result) where T : IHasAverageTime
var maxAverage = (double) result.Max(t => (double) t.AverageTime);
var pow = (int) Math.Log10(Math.Abs(maxAverage));
foreach (var res in result)
res.AverageTime = res.AverageTime / Math.Pow(10, pow);