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;
}