Что не так с моей загрузкой Ubuntu?

Я застреваю в этом месте:

"grub-install/dev/sda"

Его высказывание, что загрузчик не загружается.Что мне делать?

1
задан 2 July 2011 в 18:51

6 ответов

MyList[1] = new MyStruct("bob");

структуры в C# должны почти всегда разрабатываться, чтобы быть неизменными (то есть, не чтобы иметь способ изменить их внутреннее состояние, после того как они были созданы).

В Вашем случае, что Вы хотите сделать, должен заменить всю структуру в указанном индексе массива, чтобы не попытаться изменить просто единственное свойство или поле.

37
ответ дан 31 October 2019 в 16:05

Не совсем. При разработке типа, поскольку класс или структура не должны управляться потребностью сохранить его в наборах :) Необходимо посмотреть на необходимую 'семантику'

Проблема, которую Вы видите, должна оценить семантику типа. Каждая переменная типа значения / ссылка является новым экземпляром. Когда Вы говорите

Struct obItem = MyList[1];

то, что происходит, - то, что новый экземпляр структуры создается, и все участники копируются один за другим. Так, чтобы у Вас был клон MyList[1] т.е. 2 экземпляров. Теперь при изменении obItem он не влияет на оригинал.

obItem.Name = "Gishu";  // MyList[1].Name still remains "peter"

Теперь терпите меня в течение 2 минут здесь (Это требует времени для проглатывания.. это сделало для меня :) При реальной необходимости в структурах, которые будут сохранены в наборе и изменены как Вы обозначенный в Вашем вопросе, необходимо будет заставить структуру выставить интерфейс (Однако, это приведет к упаковке). Можно затем изменить фактическую структуру через интерфейсную ссылку, которая относится к помещенному в коробку объекту.

Следующий фрагмент кода иллюстрирует то, что я просто сказал выше

public interface IMyStructModifier
{
    String Name { set; }
}
public struct MyStruct : IMyStructModifier ...

List<Object> obList = new List<object>();
obList.Add(new MyStruct("ABC"));
obList.Add(new MyStruct("DEF"));

MyStruct temp = (MyStruct)obList[1];
temp.Name = "Gishu";
foreach (MyStruct s in obList) // => "ABC", "DEF"
{
    Console.WriteLine(s.Name);
}

IMyStructModifier temp2 = obList[1] as IMyStructModifier;
temp2.Name = "Now Gishu";
foreach (MyStruct s in obList) // => "ABC", "Now Gishu"
{
    Console.WriteLine(s.Name);
}

HTH. Хороший вопрос.
Обновление: @Hath - у Вас был я работающий, чтобы проверить, пропустил ли я что-то что простой. (Это было бы непоследовательно, если свойства метода set не делают и методы сделали - вселенная .NET все еще сбалансирована :)
Метод установщика не работает
obList2[1] возвращает копию, состояние которой было бы изменено. Исходная структура в списке остается неизмененной. Таким образом, Набор через интерфейс, кажется, только способ сделать это.

List<MyStruct> obList2 = new List<MyStruct>();
obList2.Add(new MyStruct("ABC"));
obList2.Add(new MyStruct("DEF"));
obList2[1].SetName("WTH");
foreach (MyStruct s in obList2) // => "ABC", "DEF"
{
    Console.WriteLine(s.Name);
}
43
ответ дан 31 October 2019 в 16:05

Это не так, что структуры "неизменны".

реальная базовая проблема - то, что структуры являются типом Значения, не Ссылочным типом. Таким образом, когда Вы вытаскиваете "ссылку" на структуру из списка, она создает новую копию всей структуры. Так любые изменения Вы делаете на нем, изменяют копию, не исходную версию в списке.

Как состояния Andrew, необходимо заменить всю структуру. Как та точка, хотя я думаю, что необходимо спросить себя, почему Вы используете структуру во-первых (вместо класса). Удостоверьтесь, что Вы не делаете его вокруг преждевременных проблем оптимизации.

11
ответ дан 31 October 2019 в 16:05

В дополнение к другим ответам я думал, что могло быть полезно объяснить, почему компилятор жалуется.

, Когда Вы звоните MyList[1].Name, в отличие от массива, MyList[1] на самом деле вызовы метод индексатора негласно.

Любое время метод возвращает экземпляр структуры, Вы получаете копию той структуры (если Вы не используете касательно/).

, Таким образом, Вы получаете копию и устанавливаете Name свойство на копии, которая собирается быть отброшенной, так как копия не была сохранена в переменной нигде.

Этот учебное руководство описывает то, что продолжается более подробно (включая сгенерированный код CIL).

0
ответ дан 31 October 2019 в 16:05

Нет ничего неправильно со структурами, которые выставили поля, или которые позволяют мутацию через методы set свойства. Структуры, которые видоизменяют себя в ответ на методы или методы считывания свойства, однако, опасны, потому что система позволит методам или методам считывания свойства быть названными на временных экземплярах структуры; если методы или методы считывания внесут изменения в структуру, то те изменения закончат тем, что были отброшены.

, К сожалению, как Вы отмечаете, наборы, встроенные в .NET, действительно слабы при представлении текстовых объектов значения, содержавших там. Ваш лучший выбор состоит в том, чтобы обычно делать что-то как:

  MyStruct temp = myList[1];
  temp.Name = "Albert";
  myList[1] = temp;

Несколько раздражающий, и нисколько ориентированный на многопотоковое исполнение. Все еще улучшение по сравнению со Списком типа класса, где выполнение того же самого могло бы потребовать:

  myList[1].Name = "Albert";

, но это могло бы также потребовать:

  myList[1] = myList[1].Withname("Albert");

или возможно

  myClass temp = (myClass)myList[1].Clone();
  temp.Name = "Albert";
  myList[1] = temp;

или возможно некоторое другое изменение. Действительно нельзя было бы смочь знать, если один не исследовал myClass, а также другой код, которые помещают вещи в список. Совершенно возможно, что один не смог знать, безопасна ли первая форма, не исследуя код в блоках, к которым не имеет доступа. В отличие от этого, если Имя будет выставленным полем MyStruct, метод, который я дал для обновления, то оно будет работать, независимо от того, что еще MyStruct содержит, или независимо от того, что другие вещи, возможно, сделали с myList, прежде чем код выполнится или что они могут ожидать делать с ним после.

6
ответ дан 31 October 2019 в 16:05

при попытке восстановиться, загрузчик затем переходят по этой ссылке http://www.webupd8.org/2009/12/how-to-recover-grub2-linux.html

1
ответ дан 7 December 2019 в 17:52

Другие вопросы по тегам:

Похожие вопросы: