Как сделать счётчик ошибок правильно

Я хочу сделать счётчик ошибок, чтобы при каждом получения эксепшен прибавляло +1 ошибка в счётчик, не больше.

public static int Errors = 0; // Это счётчик, считаем с нуля.
public static void Method()
{
  try
  {
    ....
  }
  catch (Exception ex)
  {
     Errors++; // Если есть ошибка добавляем в счётчик.
  }
}

Но если есть foreach допустим, то он крутит постоянно, а мне надо только один раз добавить.
Какие есть вообще варианты добавления счётчика ошибок?


Ответы (1 шт):

Автор решения: MRXIT
using System;
using System.Threading;

namespace Application
{
    internal sealed class Core
    {
        private static void Main()
        {
            for (int index = 0; index < 10; index++)
            {
                try
                {
                    throw new Exception();
                }
                catch { ExceptionCountExtensions.Instance.Increment(); }
            }

            Console.WriteLine($"Count exception: {ExceptionCountExtensions.Instance.GetCountException}");
            Console.ReadLine();
        }
    }

    internal class ExceptionCountExtensions
    {
        public int GetCountException => Count;

        private int Count;

        private static volatile ExceptionCountExtensions _instance;
        private static readonly object SyncRoot = new object();

        public static ExceptionCountExtensions Instance
        {
            get
            {
                if (_instance is not null)
                    return _instance;

                lock (SyncRoot)
                {
                    if (_instance == null)
                        _instance = new ExceptionCountExtensions();
                }

                return _instance;
            }
        }

        public void Increment()
        {
            Interlocked.Increment(ref Count);
        }
    }
}
→ Ссылка