title: Generic C# Code and the Plus Operator
body: <p>I'm writing a class that does essentially the same type of calculation for each of the primitive numeric types in C#.  Though the real calculation is more complex, think of it as a method to compute the average of a number of values, e.g.</p>
  
  <pre><code>class Calc
  {
      public int Count { get; private set; }
      public int Total { get; private set; }
      public int Average { get { return Count / Total; } }
      public int AddDataPoint(int data)
      {
          Total += data;
          Count++;
      }
  }
  </code></pre>
  
  <p>Now to support that same operation for double, float and perhaps other classes that define operator + and operator /, my first thought was to simply use generics:</p>
  
  <pre><code>class Calc&lt;T&gt;
  {
      public T Count { get; private set; }
      public T Total { get; private set; }
      public T Average { get { return Count / Total; } }
      public T AddDataPoint(T data)
      {
          Total += data;
          Count++;
      }
  }
  </code></pre>
  
  <p>Unfortunately C# is unable to determine whether T supports operators + and / so does not compile the above snippet.  My next thought was to constrain T to types that support those operators, but my initial research indicates this cannot be done.</p>
  
  <p>It's certainly possible to box each of the types I want to support in a class that implements a custom interface e.g. IMath and restrict T to that, but this code will be called a great number of times and I want to avoid boxing overhead.</p>
  
  <p>Is there an elegant and efficient way to solve this without code duplication?</p>