2013-11-19 3 views
0

Я пытаюсь удалить введенное вручную значение из класса «Solmu» после его изменения на целое.Попытка удалить значение из класса

private static void PoiataTiettyArvo(ref Solmu lista) 
{ 
    Console.WriteLine("Anna arvo jonka haluat poistaa: "); 
    int PoistaMinut = int.Parse(Console.ReadLine()); 

    int arvo = Convert.ToInt32(lista.data); 

    if(PoistaMinut != null) 
    { 
     arvo.RemoveAt(PoistaMinut); 
    } 
} 

Мой Solmu класс определяется следующим образом:

public class Solmu 
{ 
    public Solmu next; 
    public Solmu prev; 
    public double data; 
} 

Кажется RemoveAt не работает с этим, какие альтернативы?

+0

Что такое класс 'Solmu'? – Jacob

+0

Я хотел бы удалить PoistaMinut из списка. Data <, который является двойным класс Solmu { public Solmu next; public Solmu prev; общественные двойные данные; } –

+1

Для будущих читателей: 'Anna arvo jonka haluat poistaa:' переводит (в Google) на 'Введите значение, которое вы хотите удалить:'. –

ответ

0

Обновлено Ответ:

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

Вариант 1) Если Solmu класс имеет реализацию RemoveAt, вы можете назвать это, как я писал ниже - однако RemoveAt методы обычно ожидают значение индекса, так что я бы назвал это Remove (или что-то более конкретное, как RemoveValue) ,

Вариант 2) Если ваш класс Solmu создан самостоятельно, вам понадобится цикл, начинающийся с значения главы, и сравнивает поле data с введенным пользователем значением и удаляет его.

(Удалены мой код в пользу Иакова.)


Оригинальный ответ:

Вы не вынимая ничего из lista. Ваш код:

int PoistaMinut = int.Parse(Console.ReadLine()); 
int arvo = Convert.ToInt32(lista.data); 
if(PoistaMinut != null) 
{ 
    arvo.RemoveAt(PoistaMinut); // <- Remove an int from an int? 
} 

пытается удалить что-то с arvo.

Вы должны изменить код, чтобы сказать

lista.RemoveAt(PoistaMinut); 

вместо этого.

(В этом случае, однако, интересно, что цель arvo служит. Вы можете уточнить?)

+0

Содержимое lista.data двойное, я пытаюсь преобразовать его в Int. Поэтому я использовал эту строку int arvo = Convert.ToInt32 (lista.data); –

+0

Отлично, спасибо. Это сработало. Что касается вашего вопроса Почему я использую double для хранения int. Это согласно нашим инструкциям по домашнему заданию. –

1

Основываясь на ваш комментарий, это выглядит как связанный список. Вы должны будете проходным свои ценности, чтобы найти узел удалить (этот код не тестировался):

private static void PoiataTiettyArvo(ref Solmu lista) 
{ 
    Console.WriteLine("Anna arvo jonka haluat poistaa: "); 
    int PoistaMinut = int.Parse(Console.ReadLine()); 

    var previousNode = null; 
    var currentNode = lista; 
    while (currentNode != null) 
    { 
     int arvo = Convert.ToInt32(lista.data); 
     if (PoistaMinut == arvo) 
     { 
      if (previousNode == null) 
      { 
       // If there was no previous node, the head of the list is being deleted. 
       // update lista 
       lista = currentNode; 
      } 
      else 
      { 
       previousNode.next = currentNode.next; 
       if (currentNode.next != null) 
       { 
        currentNode.next.prev = previousNode; 
       } 
      } 
      break; 
     } 

     previousNode = currentNode; 
     currentNode = currentNode.next; 
    } 
} 
+0

Спасибо, Джейкоб, за вашу помощь. Тем не менее, я пробовал ваш код, и он не работал. Кроме того, я пытался изменить несколько вещей, как предлагала Visual Studio и все еще застряла. Еще раз спасибо за вашу помощь. –

+0

@CsharpNewbie - для получения наилучших результатов сообщите нам об ошибках, которые вы получаете. –

+0

Первая ошибка: Не удалось назначить неявно типизированной локальной переменной в var PreviousNode = null, поэтому я изменил ее на Solmu PreviousNode = null, и ошибка исчезла. Однако, когда я пытаюсь удалить значение, код ничего не делает. Я все равно получаю те же значения. –

Смежные вопросы