ОБНОВЛЕНИЕ: Очевидно, под "открытым типом" вы не подразумеваете то же самое, что определение спецификации C # для "открытого типа".Вы имеете в виду «универсальный тип».
Да, структуры могут быть общими.
Чтобы ответить на вторую часть вашего вопроса: я не знаю, какие "проблемы" вы имеете в виду.Можете ли вы привести пример чего-то, что вы считаете проблематичным?
Оригинальный ответ, предполагая, что вы на самом деле спрашивали об открытых типах:
Спецификация C # ясна по этому вопросу:
• Параметр типа определяет открытый тип.
• Тип массива является открытым типом тогда и только тогда, когда его тип элемента является открытым типом.
• Созданный тип является открытым типом тогда и только тогда, когда один или несколько его аргументов типа являются открытым типом.Созданный вложенный тип является открытым типом тогда и только тогда, когда один или несколько его аргументов типа или аргументов типа содержащего его типа (типов) являются открытым типом.
Итак, все.Тип структуры является открытым типом тогда и только тогда, когда он или его окружающий тип является универсальным типом с открытым типом для одного из его аргументов типа.Например:
struct S<T>
{
S<T> s1; // open struct type
Nullable<S<T>> s2; // another open struct type
}
class O<V>
{
class C<U> where U : struct
{
struct R
{
U u; // open type constrained to be value type
R r1; // open struct type; this is O<V>.C<U>.R
O<V>.C<S<U>>.R r2; // another open struct type.
O<int>.C<S<V>>.R r3; // another open struct type
}
}
}
Мы можем создавать открытые типы структур весь день.