我一直在尝试从'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 :(得分: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;
}
}
答案 1 :(得分: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
的用途是什么。你能详细说明吗?)