Только это ничем не отличается от
public struct STR2 {
public string namemm;
};
public struct STR {
public int x;
public int y;
public int z;
public (int a, int b, int c) obj; // <<<<<<< - кортежи как свойство
public STR2 lv2;
};
public class CLS1{
public STR val1;
}
Объявлять публичный тип внутри другого, а зачем?
Долго догонял ваш вопрос, потом понял.
Второе, строгая типизация, накладывает свои ограничения и каждый тип надо описывать явно. в C# есть анонимные типы, отчасти похоже что вы хотите,
https://docs.microsoft.com/ru-ru/dotnet/csharp/pro.... Динамическая же, позволяет делать как вам удобно, но не дает контроля над кодом.
Третье, есть вариант использование генераторов исходного кода, которые появились в dotnet с год назад.
Четвертое, а в чем проблема с инициализацией класса? да значимые типы инициализируются значениями по умолчанию, просто за вас это dotnet делает, в отличии от C++, который просто память на стеке выделяет, и пофиг, что там лежит. Ну сделайте конструктор по умолчанию, который будет делать инициализацию вам.