================================================================================ Struct with a type parameter struct constraint ================================================================================ public struct F where T:struct {} -------------------------------------------------------------------------------- (compilation_unit (struct_declaration (modifier) name: (identifier) type_parameters: (type_parameter_list (type_parameter name: (identifier))) (type_parameter_constraints_clause target: (identifier) constraints: (type_parameter_constraint)) body: (declaration_list))) ================================================================================ Struct with a type parameter class constraint ================================================================================ public struct F where T:class {} -------------------------------------------------------------------------------- (compilation_unit (struct_declaration (modifier) name: (identifier) type_parameters: (type_parameter_list (type_parameter name: (identifier))) (type_parameter_constraints_clause target: (identifier) constraints: (type_parameter_constraint)) body: (declaration_list))) ================================================================================ Struct with type parameter new constraint ================================================================================ public struct F where T: new() {} -------------------------------------------------------------------------------- (compilation_unit (struct_declaration (modifier) name: (identifier) type_parameters: (type_parameter_list (type_parameter name: (identifier))) (type_parameter_constraints_clause target: (identifier) constraints: (type_parameter_constraint (constructor_constraint))) body: (declaration_list))) ================================================================================ Struct with interface ================================================================================ public struct A : ISomething { } -------------------------------------------------------------------------------- (compilation_unit (struct_declaration (modifier) name: (identifier) bases: (base_list (identifier)) body: (declaration_list))) ================================================================================ Struct with multiple type parameter constraints ================================================================================ private struct F where T1 : I1, I2, new() where T2 : I2 { } -------------------------------------------------------------------------------- (compilation_unit (struct_declaration (modifier) name: (identifier) type_parameters: (type_parameter_list (type_parameter name: (identifier)) (type_parameter name: (identifier))) (type_parameter_constraints_clause target: (identifier) constraints: (type_parameter_constraint (type_constraint type: (identifier))) constraints: (type_parameter_constraint (type_constraint type: (identifier))) constraints: (type_parameter_constraint (constructor_constraint))) (type_parameter_constraints_clause target: (identifier) constraints: (type_parameter_constraint (type_constraint type: (identifier)))) body: (declaration_list))) ================================================================================ Struct with readonly modifier ================================================================================ readonly struct Test { } -------------------------------------------------------------------------------- (compilation_unit (struct_declaration (modifier) name: (identifier) body: (declaration_list))) ================================================================================ Struct with ref modifier ================================================================================ ref struct Test { } -------------------------------------------------------------------------------- (compilation_unit (struct_declaration (modifier) name: (identifier) body: (declaration_list)))