我已经解决了它没有列出与spawn字典中的错误字段相关的数据的问题,但我仍然想问我接近它的方式是否正常? < / p>
我有几个复选框,如果为true,则应添加检查项目状态并将其包含在列表中。
所以不知道该怎么做,这就是我想出来的:
HashSet<int> status = new HashSet<int>();
if (OptionsForm.filterPlayer.Checked) status.Add(0);
if (OptionsForm.filterEnemy.Checked) status.Add(1);
if (OptionsForm.filterSummon.Checked) status.Add(2);
if (OptionsForm.filterNPC.Checked) status.Add(3);
if (OptionsForm.filterObject.Checked) status.Add(4);
if (OptionsForm.filterMonster.Checked) status.Add(5);
if (OptionsForm.filterGatherable.Checked) status.Add(6);
if (OptionsForm.filterUnk.Checked) status.Add(7);
var query = from SpawnList item in spawnEntities.Values
where status.Contains(item.Status)
orderby item.Name ascending
select item;
但是目前它并没有归还我应该返回的任何错误或项目。
spawnEntities是一个带有uint的字典,SpawnList。
SpawnList是一个简单的类:
public class SpawnList
{
public string Name { get; set; }
public int Status { get; set; }
// some more data not needed for the question
}
答案 0 :(得分:3)
这是我的错误,地位就是 字典在1字段中是错误的,我 没有得到我想要的东西 列出我注意到的所有数据嘿, 但是我可以这样做吗 ?
为了避免这样的错误,我会使用枚举而不是整数 - 只需定义
enum SomeStatus
{
Player,
Enemy,
<.etc.>
}
并更改
public int Status { get; set; }
进入
public SomeStatus Status { get; set; }
答案 1 :(得分:0)
我对之前回答的评论进一步解释。您可以使用Flags
属性,这样可以更轻松地检查您的状态。
[Flags]
enum YourEnum
{
none,
Val1,
Val2,
Val3,
Val4,
}
将您的状态设置为:
public YourEnum Status {get; set;}
创建您的组合状态,如:
YourStatus status = YourEnum.None;
if(OptionsForm.filterPlayer.Checked) status = status | YourEnum.Val1;
if(OptionsForm.filterEnemy.Checked) status = status | YourEnum.Val2;
<etc>
你会得到像这样的linq:
var query = from SpawnList item in spawnEntities.Values
where status & itemStatus != YourEnum.None
orderby item.Name ascending
select item;
在此处详细了解flags属性:http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx