0

我希望根据布尔变量将我的条目分类到三个不同的列表中。然后我还需要我的列表不重复条目,所以无论使用什么条目,都需要删除。

我正在使用的列表在这里:

    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

将布尔值键入为布尔值!

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

在循环之前创建三个列表

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 回答