值类型引用类型List Remove 方法Remove不掉哪一个项。
2012-09-18 15:09
295 查看
今天改了一个bug.有点意思。
写代码的人想从List当中Remove掉一个项。 我去调试了一下一下子就发现了这个问题。把代码给改好了。
然后发现有好几种方式可以解决这个问题。我用如果来表示了。
//如果2 返回CacheStudents 这个的话在Foreach当中会出错。想删除的话得用一下ToArray
void Main()
{
var allStudents = GetStudents();
var removeList = GetStudents().Where(it=>it.Number<4); //如果1 这边的GetStudents 用allStudents
foreach(var item in removeList)
{
bool isRemoved = allStudents.Remove(item);
isRemoved.Dump();
}
allStudents.Dump();//显示出来看使用提LinqPad
}
public static List<Student> CacheStudents = new List<Student>{new Student(){Number=3,Name="张三"},new Student(){Number=4,Name="李四"},new Student(){Number=5,Name="王五"}};
public List<Student> GetStudents()
{
//如果2 返回CacheStudents
return new List<Student>{new Student(){Number=3,Name="张三"},new Student(){Number=4,Name="李四"},new Student(){Number=5,Name="王五"}};
}
public class Student //如果3 换成 Struct
{
public int Number
{get;set;}
public string Name
{get;set;}
public override int GetHashCode()
{
return Number;
}
//如果4 重写了Equals
/*public override bool Equals(object obj)
{
return (obj as Student).Number==this.Number;
}*/
}
写代码的人想从List当中Remove掉一个项。 我去调试了一下一下子就发现了这个问题。把代码给改好了。
然后发现有好几种方式可以解决这个问题。我用如果来表示了。
//如果2 返回CacheStudents 这个的话在Foreach当中会出错。想删除的话得用一下ToArray
void Main()
{
var allStudents = GetStudents();
var removeList = GetStudents().Where(it=>it.Number<4); //如果1 这边的GetStudents 用allStudents
foreach(var item in removeList)
{
bool isRemoved = allStudents.Remove(item);
isRemoved.Dump();
}
allStudents.Dump();//显示出来看使用提LinqPad
}
public static List<Student> CacheStudents = new List<Student>{new Student(){Number=3,Name="张三"},new Student(){Number=4,Name="李四"},new Student(){Number=5,Name="王五"}};
public List<Student> GetStudents()
{
//如果2 返回CacheStudents
return new List<Student>{new Student(){Number=3,Name="张三"},new Student(){Number=4,Name="李四"},new Student(){Number=5,Name="王五"}};
}
public class Student //如果3 换成 Struct
{
public int Number
{get;set;}
public string Name
{get;set;}
public override int GetHashCode()
{
return Number;
}
//如果4 重写了Equals
/*public override bool Equals(object obj)
{
return (obj as Student).Number==this.Number;
}*/
}
相关文章推荐
- NET-OOP:.属性、方法、值类型和引用类型
- flex 3 list控件添加Item的方法【1061: 调用可能未定义的方法 addItem (通过 static 类型 spark.components:List 引用)】
- 值类型\引用类型\抽象方法\虚方法
- C#中 List类型Remove()方法不能移除对象问题
- .net学习之.net和C#关系、运行过程、数据类型、类型转换、值类型和引用类型、数组以及方法参数等
- 不能用new List()的方法实现引用类型List的复制
- 30天C#基础巩固-----值类型/引用类型,泛型,空合并操作符(??),匿名方法
- Java List<T>去重方法,引用类型集合去重
- NET-OOP:.属性、方法、值类型和引用类型
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- 【值类型VS引用类型】 And【值传递VS引用传递】
- 值类型 and 引用类型
- 值类型和引用类型区别
- List<Map<String, Object>>保存的是引用数据类型的地址
- List的remove方法,你是否真的懂了
- 值类型与引用类型的简单测试,没有太多的理论,一目了然。
- 使用List的remove方法需要的注意的问题
- C#值类型和引用类型与Equals方法
- 值类型与引用类型
- 值类型与引用类型(上)