0

bool 変数に基づいて、エントリを 3 つの異なるリストに並べ替えようとしています。次に、エントリが重複しないようにリストが必要なので、使用されているエントリはすべて削除する必要があります。

私が使用しているリストは次のとおりです。

    public class Associate
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string AssocRfid { get; set; }
        public string AssocId { get; set; }
        public bool CanDoDiverts { get; set; }
        public bool CanDoMhe { get; set; }
        public bool CanDoLoading { get; set; }
    }

このリストが読み取られるコードはここにあります (重要かどうかわかりません)。

                #region Dialog Yes

            case DialogResult.Yes:
                {
                var secondForm = new Form2();
                secondForm.Show();
                dataGridAssociates.Rows.Clear();
                var lines = File.ReadAllLines(FileChosen); //Array of all the lines in the text file
                    foreach (var assocStringer in lines)
                    {
                        if (assocStringer == null) continue;
                        var entries = assocStringer.Split('|');
                        if (entries.Count() < 7)
                            return;
                        var obj = (Associate) _bindingSource.AddNew();
                        if (obj == null) continue;
                        obj.FirstName = entries[0];
                        obj.LastName = entries[1];
                        obj.AssocId = entries[2];
                        obj.AssocRfid = entries[3];
                        obj.CanDoDiverts = Convert.ToBoolean(entries[4]);
                        obj.CanDoMhe = Convert.ToBoolean(entries[5]);
                        obj.CanDoLoading = Convert.ToBoolean(entries[6]);
                    }
                break;
            }
                #endregion

リストは次のとおりです。

Matthew|Something|114282353|MXW320|True|True|True|
Audrey|Something|114282354|AXW420|True|True|True|
John|Doe|111222333|JXD020|True|True|False|

ある種の別のリスト/コンテナに移動するには、行/エントリ全体が必要です。

_bindingSource は、コードを datagridview に追加することです。コードのこの部分では重要ではありません。これを機能させるために、この部分を自由に変更してください。私は完全に迷っています。

また、ずさんなコードについてお詫び申し上げます。私はまだ学習中です。コードへの追加入力は大歓迎です。

4

2 に答える 2

2

あなたが何を望んでいるかを正しく理解していれば。

linq クエリを使用して、必要な結果を引き出します。その後、元のリストから項目を削除できます。

 var associates = new List<Associate> 
 { 
      new Associate{CanDoDiverts = true}, 
      new Associate{CanDoDiverts = false}
 };

 var resultList = associates.Where(p => p.CanDoDiverts == true).ToList();
 // .ToList() ensures deferred execution wont result in the ResultList being empty when you remove the matching items from the master list.
 associates.RemoveAll(p => p.CanDoDiverts == true);

ちなみに、ブール値をテストしている場合、プロパティは文字列ではなくブール値でなければなりません

于 2012-12-21T16:40:12.133 に答える
0

boolsをboolsとして入力してください!

public class Associate
{
    ...
    public bool CanDoDiverts { get; set; }
    public bool CanDoMhe { get; set; }
    public bool CanDoLoading { get; set; }
}

ループの前に3つのリストを作成します

var divertsList =  new List<Associate>();
var mheList =  new List<Associate>();
var loadingList =  new List<Associate>();

(ループ内で)新しいオブジェクトを作成して入力した後、次のようにリストに追加します

obj.FirstName = entries[0];
obj.LastName = entries[1];
obj.AssocId = entries[2];
obj.AssocRfid = entries[3];
obj.CanDoDiverts = Boolean.Parse(entries[4]);
obj.CanDoMhe = Boolean.Parse(entries[5]);
obj.CanDoLoading = Boolean.Parse(entries[6]);

if(obj.CanDoDiverts) {
    divertsList.Add(obj);
}
if(obj.CanDoMhe) {
    mheList.Add(obj);
}
if(obj.CanDoLoading) {
    loadingList.Add(obj);
}

すべてのアソシエートを同じリストに追加し、必要に応じてリストをフィルタリングすることもできます

var canDoDivertsQuery = associatesList.Where(a => a.CanDoDiverts);
foreach (Associate associate in canDoDivertsQuery) {
    // Work with associate being able to do diverts
}
于 2012-12-21T17:06:35.067 に答える