Is there a more elegant way to add nullable ints?

Viewed 22141

I need to add numerous variables of type nullable int. I used the null coalescing operator to get it down to one variable per line, but I have a feeling there is a more concise way to do this, e.g. can't I chain these statements together somehow, I've seen that before in other code.

using System;

namespace TestNullInts
{
    class Program
    {
        static void Main(string[] args)
        {
            int? sum1 = 1;
            int? sum2 = null;
            int? sum3 = 3;

            //int total = sum1 + sum2 + sum3;
            //int total = sum1.Value + sum2.Value + sum3.Value;

            int total = 0;
            total = total + sum1 ?? total;
            total = total + sum2 ?? total;
            total = total + sum3 ?? total;

            Console.WriteLine(total);
            Console.ReadLine();
        }
    }
}
9 Answers

If all numbers in the array are null I would expect the total to be null.

// E.g. 
int? added = null, updated = null, deleted = null; 
...
int? total = added + updated + deleted; // null i.e. nothing has been done.

Test Cases

Sum(new int?[] { null, null}).Dump(); // null   
Sum(new int?[] { 1, null}).Dump();    // 1
Sum(new int?[] { null, 2}).Dump();    // 2
Sum(new int?[] { 1, 2}).Dump();       // 3

Sample Implementation

int? Sum(int?[] numbers)
{
    int? total = null;

    for (int i = 0; i < numbers.Length; i++)
    {
        int? item = numbers[i];
        if (item != null)
        {
            if (total == null)
            {
                total = item;
            }
            else
            {
                total += item;
            }
        }
    }
    
    return total;
}
Related