Dav*_*vid 7 c# linq-to-objects
我有一个IList用户
private IList<User> _Players
Run Code Online (Sandbox Code Playgroud)
我有一种方法从列表中删除特定用户
public virtual void RemovePlayer(User User)
{
int index=_Players.Select(T=>T.ID).ToList().IndexOf(User.ID);
_Players.RemoveAt(index);
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种更简单的方法可以从此列表中删除用户
Bro*_*ass 11
如果User您使用的对象保存在_ Playerslist(相同的对象引用)中,您可以这样做
_Players.Remove(user);
Run Code Online (Sandbox Code Playgroud)
否则,如果只有id匹配,你可以这样做:
_Players.RemoveAll( p => p.ID == user.ID);
Run Code Online (Sandbox Code Playgroud)
这个怎么样?如果您的参数User不属于,请使用此选项_Players.
_Players.Remove(_Players.SingleOrDefault(x => x.ID == User.ID));
Run Code Online (Sandbox Code Playgroud)
在SingleOrDefault()确保如果没有找到匹配,则返回NULL.尝试删除null时,不会发生错误或抛出错误.
有两种情况,user即您要传递的变量RemovePlayer
ID值,但不是同一个对象.从您的代码示例中无法说出来.
对于第一种情况,只需打电话_Players.Remove(user).对于第二种情况,实现 System.IEquatable<User>接口on User以定义默认值EqualityComparer<User>然后再次调用_Players.Remove(user).第二种情况适用于这两种情况.
视情况而定,如果您已经IEquatable对用户实施了比较ID,那么您可以简单地执行_Players.Remove(user).
除此以外:
var doomed = _Players.FirstOrDefault(p => p.ID == user.ID);
if (doomed != null)
_Players.Remove(doomed);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29051 次 |
| 最近记录: |