2014-03-30 63 views
-2

我尝试使用下面的表达式确定是否使用LINQ

var duplicates = players.Where(b => b.Name == nameBox.Text.ToString()).ToString(); 

,以评估是否在该领域namebox中值在球员名单中已经存在一组存在重复。

public class Player 
{ 
    private int score; 
    private int mapSize; 
    private int wins; 
    private int level; 
    private int plays; 
    // private List<String> Paths { get; set; } 
    public String Paths { get; set; } 

    public Player() 
    { 
    } 

    public Player(String name) 
    { 
     Name = name; 
    } 

StreamReader sr = new StreamReader(@".\Player.csv"); 
String line = sr.ReadLine(); 
List<Player> players = new List<Player>(); 
while (!String.IsNullOrEmpty(line)) 
{ 
    String[] words = line.Split(','); 
    Player gamer = new Player(words[0], words[1], int.Parse(words[2]), int.Parse(words[3]), int.Parse(words[4])); 
    players.Add(gamer); 
    line = sr.ReadLine(); 
} 

sr.Close(); 

和VAR重复的结果是一个空值(在调试播放器和namebox中被corectly使用)。

我想确定如果我有重复的值,在奥德广告用户更改他的用户名,如果用户名具有相同的名称已经存在于文件中。

+1

你想删除重复? –

+5

你的问题是什么? –

+0

Craig W解决了我的问题。 – MxM

回答

1

我并不感到惊讶,你没有得到你所期望的,但我有点惊讶,它是一个空值。我们从基本的LINQ查询开始。

players.Where(b => b.Name == nameBox.Text.ToString()) 

这将返回条件匹配的播放器对象的集合。然后你添加一个ToString(),你将获得转换成字符串的播放器对象的集合。当我运行这个地方我得到的结果为:

System.Linq.Enumerable+WhereListIterator`1[ConsoleApplication1.Player] 

无论如何,如果你正在试图做的是确定是否有重复的,你应该使用的。任何()方法。

var isDuplicate = players.Any(p => p.Name == nameBox.Text); 

我的猜测是,你并不需要一个ToString()添加到nameBox.Text因为Text可能已经是一个字符串。请不要成为那些懒散的开发者之一,他们在所有事情上都挥舞着ToString(),就像它是一种神奇的治疗方法。

+0

谢谢你,先生,它的工作:-) – MxM

+0

如果它解决了问题,请将其标记为答案。 –

+0

我不能因为被搁置:-( – MxM