using System.Collections.Generic;
public class ValueContainer
public double Value{get;set;}
public List<Mention> Mentions{get;set;}
public double Value{get;set;}
public MentionType Type{get;set;}
public Mention(double value, MentionType type)
public static Mention operator * (double value, Mention m)
=> new Mention(m.Value * value,m.Type);
public static Mention operator * (Mention m, double value)
=> new Mention(m.Value * value,m.Type);
public static ValueContainer operator * (Mention m1, Mention m2)
Value = (m1.Type,m2.Type) switch
(MentionType.Normal, MentionType.Normal) => m1.Value * m2.Value,
(MentionType.Normal, MentionType.Reversed) => m1.Value / m2.Value,
(MentionType.Reversed, MentionType.Normal) => m2.Value / m1.Value,
(MentionType.Reversed, MentionType.Reversed) => 1 / (m1.Value * m2.Value),
(_,_) => throw new ArgumentException("What a retard, lol")
Mentions = new List<Mention>()
public class Kg : Mention
public Kg(double value, MentionType type = MentionType.Normal) : base(value,type)
public class Meter : Mention
public Meter(double value, MentionType type = MentionType.Normal) : base(value,type)
public static void Main()
var manyDicks = 100 * dicks;
Console.WriteLine(string.Format("{0} kg of dicks", manyDicks.Value));