Ésta es una versión simplificada de una parte de mi código:ciclo en el diseño de estructura que no existe
public struct info
{
public float a, b;
public info? c;
public info(float a, float b, info? c = null)
{
this.a = a;
this.b = b;
this.c = c;
}
}
El problema es el error Struct member 'info' causes a cycle in the struct layout.
que busco estructura como el comportamiento tipo de valor. Podría simular esto usando una clase y una función de miembro de clonación, pero no veo por qué debería hacerlo.
¿Cómo es este error? La recursividad podría quizás causar una construcción para siempre en algunas situaciones similares, pero no puedo pensar de ninguna manera que podría en este caso. A continuación hay ejemplos que deberían estar bien si el programa compilara.
new info(1, 2);
new info(1, 2, null);
new info(1, 2, new info(3, 4));
edición:
La solución que utilicé fue hacer "info" una clase en lugar de una estructura y dándole una función miembro a regresar una copia que he utilizado al pasar él. En efecto, simula el mismo comportamiento que una estructura pero con una clase.
También creé la siguiente pregunta mientras buscaba una respuesta.
Value type class definition in C#?
Supongo que necesitas tener al menos un constructor que no tome 'info' como parámetro? Estás usando un argumento predeterminado, pero quizás a C# no le gusta eso. ¿Qué pasa si haces dos constructores? –
Simplemente conviértalo en una clase; esto no es datos de estructura –
'info?' no es un * puntero * a 'información', es una copia. Si realmente necesitas esto (no deberías), ¿por qué no crear tu propio tipo anulable que es una 'clase'? Incluso podría tener operadores implícitos para convertir a 'YourNullable' de 'Nullable '. Por supuesto, significaría un * boatload * de 'YourNullable's, probablemente eliminando cualquier bonificación (si la hubiera) por tener su clase como una 'struct' :) C#' struct's no son C 'struct' s. –
Luaan