Примечание: мой вопрос состоит из нескольких частей. Буду признателен, если вы ответите на каждый из вопросов, а не просто скажете мне, что нужно сделать, чтобы это скомпилировать. :)
Я не очень хорош в C #. Фактически, причина, по которой я мало что знаю об этом, заключается в том, что мой класс сосредоточен на создании эффективных алгоритмов, а не на обучении нас .NET. Тем не менее, все наши программы должны быть написаны на .NET, и это не было проблемой до сих пор. У меня есть следующий код, но он не скомпилируется, и я не совсем понимаю, почему. У меня есть ощущение, что это должно быть полностью переписано, но прежде чем я это сделаю, я хочу знать, ПОЧЕМУ это не разрешено.
Смысл структуры состоит в том, чтобы создать связанный список, подобный структуре, чтобы я мог добавить еще один узел в конец «списка», а затем пройти и вызвать узлы в обратном порядке
private struct BackPointer
{
public BackPointer previous;
public string a;
public string b;
public BackPointer(BackPointer p, string aa, string bb)
{
previous = p;
a = aa;
b = bb;
}
}
потом в моем коде я что-то с эффектом
BackPointer pointer = new BackPointer();
pointer = new BackPointer(pointer, somestring_a, somestring_b);
Я получаю ошибку компиляции Struct member 'MyClass.BackPointer.previous' of type 'MyClass.BackPointer' causes a cycle in the struct layout
Кажется, это очевидная ошибка. Не нравится тот факт, что я передаю структуру в конструкторе той же структуры. Но почему это не разрешено? Я предположил бы, что этот код просто создаст новый узел в списке и вернет этот узел с указателем на предыдущий узел, но, очевидно, это не то, что произойдет. Так что же тогда будет на самом деле? Наконец, каков рекомендуемый способ решить эту проблему? Я думал просто сказать, что это неуправляемо, просто обрабатывать мои указатели вручную, но я действительно знаю, как это сделать в C ++. Я действительно не знаю, что может пойти не так в C #