Special summation of integer array elements
I think min and max are more descriptive names than high and low.
In C# the standard naming convention for methods is PascalCase.
You could save several iterations by doing the following things:


Create a single method for determining min and max in one go and return either a Tuple or a custom type or an array of length 2 or provide out parameters. If you don't want to use any more complex types than arrays then I'd probably go for out parameters (returning an array of a certain size doesn't seem very nice). So something along these lines:

public void DetermineMinAndMax(int[] input, out int min, out int max)
{
    min = Int32.Max;
    max = In32.Min;
    foreach (int number in input)
    {
        if (number &lt; min) { min = number; }
        else if (number &gt; max) { max = number; }
    }
} 

Keep counters of how often you have seen the min/max already - if it's 1 add it otherwise skip. Something along these lines:

public void SumSpecial(int[] input)
{
    int min, max;

    DetermineMinAndMax(input, out min, out max);

    int countMinSeen = 0;
    int countMaxSeen = 0;

    int sum = 0;

    foreach (int number in input)
    {
        if (number == min)
        {
            if (countMinSeen == 1) { sum += number; }
            countMinSeen++;
        }
        else if (number == max)
        {
            if (countMaxSeen == 1) { sum += number; }
            countMaxSeen++;
        }
        else { sum += number; }
    }
}



This should reduce the number of required iterations to 2 instead of 4.