2017-06-27 12 views
0

C#でオブジェクトのリストから特定の文字列を取得しようとしています(そのリストのuserlistを呼び出しましょう)(リストには約1600個の要素があり、パラメーター)。 だから、これは私が持っているコードです:プログラムはリストの残りの部分を無視しているようです

private List<String> getGameList(CommandEventArgs e) { 
     List<String> allgames = new List<string>(); 
     List<User> userlist = e.Server.Users.ToList(); 
     foreach (User u in userlist) 
     { 
      if (u.CurrentGame.ToString() != "") 
      { 
       if (u.CurrentGame.Value.Name != null) 
       { 
        allgames.Insert(0, u.CurrentGame.Value.Name); 


       } 

      } 

     } 

     return allgames; 


    } 

しかし、それはより多くを取得する必要がありながら、それは毎回このコードのビットが返されるリストを実行することをその中に1つまたは2つの結果を持っています。

  • ユーザー
  • その下に約15パラメータ/オブジェクトとオブジェクトであるu.CurrentGameが「ユーザー」の下にある「ゲーム」と呼ばれるオブジェクトを取得しますコードに関する詳細情報を提供する

  • u.CurrentGame.Value.Nameは、私が取得し、新たな「allgames」リストに追加したい文字列です
  • 私はインサート(0、文字列)奇妙であると知っているが、何らかの理由での簡単な.Addはdidnの正しく動作していないようです。

なぜ1から2の結果しか持たないのですか? 必要に応じて、より多くの情報を確実に提供できます。

は私の推測では、あなたが早く returnまたはあなたはおそらく使用されている必要がありますあなたのループ内のどこか breakを持っているのどちらかということである完全なコードを見ることなく、あなた

+0

をあなたはallgames.Add' 'に直面何が問題?あなたはコードをデバッグし、それがリストに値を挿入する回数を確認しましたか?あなたは 'u.CurrentGame.ToString()'と 'u.CurrentGame.Value.Name'がすべてのユーザにとってnullではないと確信していますか? –

+0

予想される結果が失敗しているかどうかを確認し、そこから結論を引き出すには、if()にブレークポイントを挿入する必要があります。 – hoodaticus

+0

オブジェクトにはパラメータがありません。 * "" User "の下にある" Game "というオブジェクト*は無意味です。実際に何を言っているのかを教えてください。ループの開始時にブレークポイントを設定し、それをステップ実行することで、何が起きているのかを簡単に知ることができます。 –

答えて

1

ありがとうcontinue代わりに、リストを反復処理を続行へ。

""との比較ではなく、おそらくstring.IsNullOrEmpty(s)を使用しているはずです。

これは、あなたが提供した情報を提供するのに役立ちます。

+0

あなたは方法全体を見ることができます。その方法のどこにでも休憩の言及があります。私はブレークポイントを置いていて、それが結果に見つかった後、foreachループから飛び出し、foreachループの外にあるリターンに行きます – Captain

0

私は小さな実験3例、およびすべての3例は何とか作品でした:

using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace p44785433 
{ 
class Program 
{ 
    static List<User> userList = UserFactory.GenerateUsers(); 
    static void Main(string[] args) 
    { 
     Console.WriteLine("Number Of Users: {0}", userList.Count); 
     var x = getGameList(userList); // 1600 on output 
     var y = getGameListUpdated(userList); // 1600< on output depend of randomized empty name 
     var z = getGameListLinq(userList); // 1600< on output depend of randomized empty name 
    } 

    private static List<String> getGameList(List<User> parUserList) 
    { 
     List<string> allgames = new List<string>(); 
     List<User> userlist = /*e.Server.Users.ToList();*/ parUserList; 
     foreach (User u in userlist) 
     { 
      if (u.CurrentGame.ToString() != "") 
      { 
       if (u.CurrentGame.Value.Name != null) 
       { 
        allgames.Insert(0, u.CurrentGame.Value.Name); 
       } 
      } 
     } 

     return allgames; 
    } 

    private static List<String> getGameListUpdated(List<User> parUserList) 
    { 
     List<string> allgames = new List<string>(); 
     List<User> userlist = /*e.Server.Users.ToList();*/ parUserList; 
     foreach (User u in userlist) 
     { 
      if (!string.IsNullOrEmpty(u.CurrentGame.ToString())) 
      { 
       if (!string.IsNullOrEmpty(u.CurrentGame.Value.Name)) 
       { 
        allgames.Insert(0, u.CurrentGame.Value.Name); 
       } 
      } 
     } 

     return allgames; 
    } 

    private static List<String> getGameListLinq(List<User> parUserList) 
    {    
     List<User> userlist = /*e.Server.Users.ToList();*/ parUserList; 
     var x = userList.Where(r => !string.IsNullOrEmpty(r.CurrentGame.ToString()) && !string.IsNullOrEmpty(r.CurrentGame.Value.Name)); // remove empty 
     var y = x.Select(r => r.CurrentGame.Value.Name); // select strings 
     var z = y.Reverse(); // reverse order instead of insert 

     return z.ToList(); 
    } 
} 

internal class User 
{ 
    public Game CurrentGame { get; set; } 
    public string Par1 { get; set; } 
    public string Par2 { get; set; } 
    public string Par3 { get; set; } 
    public string Par4 { get; set; } 
    public string Par5 { get; set; } 
    public string Par6 { get; set; } 
    public string Par7 { get; set; } 
    public string Par8 { get; set; } 
    public string Par9 { get; set; } 
    public string Par10 { get; set; } 
    public string Par11 { get; set; } 
    public string Par12 { get; set; } 
    public string Par13 { get; set; } 
    public string Par14 { get; set; } 

    internal static User CreateDummy() 
    { 
     return new User() 
     { 
      CurrentGame = Game.CreateDummy(), 
      Par6 = UserFactory.Rnd.NextDouble().ToString(), 
      Par12 = UserFactory.Rnd.NextDouble().ToString() 
     }; 
    } 
} 


internal static class UserFactory 
{ 
    static Random _rnd; 
    internal static Random Rnd 
    { 
     get 
     { 
      if (_rnd == null) _rnd = new Random(); 
      return _rnd; 
     } 
    } 
    internal static List<User> GenerateUsers() 
    { 
     List<User> list = new List<User>(); 

     for (int i = 0; i < (int)1600; i++) 
     { 
      list.Add(User.CreateDummy()); 
     } 

     return list; 
    } 
} 

internal class Game 
{ 
    public Value Value { get; set; } 

    public string Par1 { get; set; } 
    public string Par2 { get; set; } 
    public string Par3 { get; set; } 
    public string Par4 { get; set; } 
    public string Par5 { get; set; } 
    public string Par6 { get; set; } 
    public string Par7 { get; set; } 
    public string Par8 { get; set; } 
    public string Par9 { get; set; } 
    public string Par10 { get; set; } 
    public string Par11 { get; set; } 
    public string Par12 { get; set; } 
    public string Par13 { get; set; } 
    public string Par14 { get; set; } 

    public override string ToString() 
    { 
     return Par6; 
    } 

    internal static Game CreateDummy() 
    { 
     return new Game() 
     { 
      Value = Value.CreateDummy(), 
      Par6 = UserFactory.Rnd.NextDouble().ToString(), 
      Par12 = UserFactory.Rnd.NextDouble().ToString() 
     }; 
    } 
} 

internal class Value 
{ 
    public string Name { get; set; } 
    public string Par1 { get; set; } 
    public string Par2 { get; set; } 
    public string Par3 { get; set; } 
    public string Par4 { get; set; } 
    public string Par5 { get; set; } 
    public string Par6 { get; set; } 
    public string Par7 { get; set; } 
    public string Par8 { get; set; } 
    public string Par9 { get; set; } 
    public string Par10 { get; set; } 
    public string Par11 { get; set; } 
    public string Par12 { get; set; } 
    public string Par13 { get; set; } 
    public string Par14 { get; set; } 

    internal static Value CreateDummy() 
    { 
     return new Value() 
     { 
      Name = (UserFactory.Rnd.Next(10)!=0 ? string.Format("XXA{0}XAA", UserFactory.Rnd.NextDouble()): string.Empty), 
      Par5 = UserFactory.Rnd.NextDouble().ToString(), 
      Par11 = UserFactory.Rnd.NextDouble().ToString() 
     }; 
    } 
} 

}

関連する問題