Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过特定比较从LinkedList中删除项目?_C# - Fatal编程技术网

C# 如何通过特定比较从LinkedList中删除项目?

C# 如何通过特定比较从LinkedList中删除项目?,c#,C#,我有LinkedList有Remove(item)方法作为paramitem获取 我想知道通过特定参数删除项目必须覆盖哪些内容 例如,我有LinkedList,在MyClass中我有变量int index,我想用这个值进行比较 比如,我正在寻找一些override compare(Obj)方法,当我根据需要的值从LinkedList中删除项目时,我可以覆盖和比较对象 编辑 方法,其中不适用,因为实际上我有一个通用的LinkedList实现,实际上我的LinkedList看起来像LinkedLis

我有
LinkedList
Remove(item)
方法作为param
item
获取

我想知道通过特定参数删除项目必须覆盖哪些内容

例如,我有
LinkedList
,在
MyClass
中我有变量int index,我想用这个值进行比较

比如,我正在寻找一些
override compare(Obj)
方法,当我根据需要的值从
LinkedList
中删除项目时,我可以覆盖和比较对象

编辑


方法
,其中
不适用,因为实际上我有一个通用的
LinkedList
实现,实际上我的
LinkedList
看起来像
LinkedList
,它可以是任何类型。因此,我不能使用
where
,因为实际上我不知道确切的类型

最简单的方法是设置一个变量,该变量将检查链接方式中的每个值是否是要删除的值,并设置一个变量,该变量比第一个变量跟踪的值晚一个值/步

这样,当主变量(进行检查的变量)发现要删除的列表值时,可以将后面变量的“下一个值”设置为等于主变量的“下一个值”,从而覆盖和删除它

每次增加主变量时,也要增加behind变量,以便使其落后一步

图表(左为前,右为后):

基本上,只需设置两个变量:一个是检查每个链表值以找到要删除的值,另一个是在其后面,以便在找到要删除的值时,将其后面的变量设置为主变量前面的值,从而覆盖删除的部分。
使用System;
using System;
using System.Collections.Generic;

namespace ConsoleAppCore
{
    public static class Extension
    {
        public static List<dynamic> Where(this IEnumerable<dynamic> list, Func<dynamic, bool> func)
        {
            List<dynamic> result = new List<dynamic>();
            foreach(dynamic item in list) {
                try {
                    if (func(item))
                        result.Add(item);
                }
                catch {
                    continue;
                }
            }
            return result;
        }
    }
    class YourClass
    {
        public int x = 5;
    }
    class Program
    {
        static void Main(string[] args)
        {
            LinkedList<dynamic> list = new LinkedList<dynamic>();
            list.AddAfter(list.AddAfter(list.AddAfter(list.AddAfter(
                list.AddAfter(list.AddAfter(list.AddAfter(list.AddFirst(
                    (decimal)1), 2), (double)3), "Hello"), 5), new YourClass()), (float)7), 8);

            var newlist = list.Where(i => i == "Hello");
            // only one logical operation at a time (caused exceptions break the logic)
            newlist.AddRange(list.Where(i => i.x == 5));
            newlist.AddRange(list.Where(i => i > 5));

            foreach(var i in newlist)
                Console.WriteLine(i);
        }
    }
}
使用System.Collections.Generic; 名称空间控制台AppCore { 公共静态类扩展 { 公共静态列表,其中(此IEnumerable列表,Func Func) { 列表结果=新列表(); foreach(列表中的动态项){ 试一试{ if(职能(项目)) 结果.添加(项目); } 抓住{ 继续; } } 返回结果; } } 你的班级 { 公共整数x=5; } 班级计划 { 静态void Main(字符串[]参数) { LinkedList=新建LinkedList(); list.AddAfter(list.AddAfter)(list.AddAfter)(list.AddAfter)(list.AddAfter( list.AddAfter(list.AddAfter)(list.AddAfter(list.AddFirst( (十进制)1),2),(双精度)3),“你好”,5),新的YourClass(),(float)7),8); var newlist=list.Where(i=>i==“Hello”); //一次只能执行一个逻辑操作(导致异常中断逻辑) AddRange(list.Where(i=>i.x==5)); AddRange(list.Where(i=>i>5)); foreach(新列表中的var i) 控制台写入线(i); } } }
输出


您好,ConsoleAppCore.YourClass,7,8

查找不相等的项而不是相等的项:LinkedList myClass=new LinkedList();LinkedList结果=(LinkedList)myClass.Where(x=>x.item!=5);这回答了你的问题吗?我不确定,但还不够var new list=LinkedList.Where(x=>x.index==1.ToList();foreach(列表中的var项){LinkedList.Remove(item)}我会创建我自己的对象并覆盖Remove方法,或者我想你可以尝试扩展方法并用你自己的方法扩展LinkedList。你可以查找以下内容:,在你的
MyClass
上实现
IEquatable
,他不在乎
value-type