public T A<T>() where T : struct { var t = new T(); ... return t; }
Вот такой код мы обычно воспринимаем как "сделать default значение и потом мы его вернем". Все бы ничего, но это не совсем так. Вот как будет выглядеть этот код:
public T A<T>() where T : struct { var t = System.Activator.CreateInstance<T>(); ... return t; }
Исправить это довольно просто:
public T A<T>() where T : struct { T t = default; ... return t; }