Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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# 通过与c中的列表进行比较来忽略类的属性_C#_List_Filtering - Fatal编程技术网

C# 通过与c中的列表进行比较来忽略类的属性

C# 通过与c中的列表进行比较来忽略类的属性,c#,list,filtering,C#,List,Filtering,我有一个列表,其中TestClass是一个具有一些预定义属性的类。因此,当我获取数据并用数据绑定列表时,我需要通过将TestClass与列表进行比较来忽略它的一些属性。我怎样才能做到这一点 下面是我的代码 public class TestClass { public int id{get;set;} public string fname{get;set;} public string lname{get;set;} public string job {get;set;} pu

我有一个列表,其中TestClass是一个具有一些预定义属性的类。因此,当我获取数据并用数据绑定列表时,我需要通过将TestClass与列表进行比较来忽略它的一些属性。我怎样才能做到这一点

下面是我的代码

    public class TestClass
{
 public int id{get;set;}
 public string fname{get;set;} 
public string lname{get;set;}
public string job {get;set;}
public string role{get;set;}
public string address{get;set;}
}



List<TestClass> ulist = null;
   ulist = ToList<TestClass>(usersdataset.tables[0]); //fill my list with the data code is given below
因此,在将数据放入列表后,我需要通过将其与应返回的属性列表进行比较来删除一些属性。例如,如果我的filteredlist应仅显示id、fname和role,则我需要从我的ulist中删除额外的属性。因此,在过滤器之后,ulist应该只包含id、fname和role

托利斯特法


使用overvride函数等于: 此示例仅比较id属性

public class TestClass
    {
        public int id { get; set; }
        public string fname { get; set; }
        public string lname { get; set; }
        public string job { get; set; }
        public string role { get; set; }
        public string address { get; set; }
        public override bool Equals(object obj)
        {
            if (obj.GetType().Name != this.GetType().Name)
            {
                return false;
            }
            TestClass testclassObject = (TestClass)obj;
            if (testclassObject.id != this.id)
            {
                return false;
            }

            return true;
        }

你的代码怎么了?我可以看出它在哪里更简洁、更高效,但它是否会导致错误?一旦您将包含要忽略的属性名称列表的列表传递给ToList,您到底在寻求什么帮助?然后在dtlFieldNames中的foreach var dtField循环中。其中f=>!ignoreList。那么你就永远不会填写它们了。否则,您将不得不再次使用反射来循环列表中的每一项,并逐个清空每个属性,再次使用反射GetProperties。请注意:由于整个函数的T保持不变,因此不需要PropertyInfo propertyinfos=classObj。。。循环中的行。将其移到顶部var props=typeofT.GetPropertiesflags.ToDictionaryx=>x.Name,然后用var propertyInfo=props[dtField.Name]之类的内容替换循环中的行;通过这种方式,您可以继续重用PropertyInfo对象,而不必通过反射继续查找它,尽管它是不同的对象,PropertyInfo对象是相同的,因此您可以在其中指定要调用它的对象的第一个参数to SetValue
public class TestClass
    {
        public int id { get; set; }
        public string fname { get; set; }
        public string lname { get; set; }
        public string job { get; set; }
        public string role { get; set; }
        public string address { get; set; }
        public override bool Equals(object obj)
        {
            if (obj.GetType().Name != this.GetType().Name)
            {
                return false;
            }
            TestClass testclassObject = (TestClass)obj;
            if (testclassObject.id != this.id)
            {
                return false;
            }

            return true;
        }