我正在形成如下对象列表,Control是枚举列表。
例如:
public enum Controls
{
Undefined = 0,
[EnumReferenceTypeField(DisplayName = "Edit")]
Edit = 1,
[EnumReferenceTypeField(DisplayName = "Save")]
Save = 2,
}
构建动作列表已编写代码,不允许更改。
var actions = new List<object>();
foreach (var control in Controls)
{
actions.Add(new
{
c = (int)control ,
t = control.ToString()
});
}
并检查以下条件,
if (actions.Exists(a => a == (object)Enums.Controls.Save))
actions.Remove(Enums.Controls.Submit);
即使我将Enum转换为对象类型,Exists条件也不满意,即使动作列表具有Save action。如果我在运行时将鼠标移动到操作上,则必须使用值&#34; 2&#34;和&#34;保存&#34;。我想检查保存是否存在并执行一些逻辑。
答案 0 :(得分:3)
这里有各种各样的错误:
如果Controls
确实是您所显示的enum
,那么您无法使用
foreach (var control in Controls) // won't work if Controls is an enum type
您可以使用以下内容:
var controls =
Enum
.GetValues(typeof(Controls))
.Cast<Controls>()
.ToList();
foreach (var control in controls)
...
由于actions
是List<object>
,并且您要添加的项目是匿名类型,因此您无法访问项目的成员。必须隐式键入actions
:
var actions =
controls // as above
.Select(control => new {
c = (int)control ,
t = control.ToString()
}).ToList();
或者您需要使用非匿名类型并强制转换为它:
class MyAction {
public int c { get; set; }
public string t { get; set; }
public MyAction(Controls control) {
c = (int)control;
t = control.ToString();
}
}
var actions = new List<MyAction>();
foreach (var control in controls)
actions.Add(new MyAction(control));
如果Controls
定义了您的说法,则没有Controls.Submit
这样的值。
如果Controls
确实是enum
,那么拥有像以下这样的行没有任何意义:
if (actions.Exists(a => a == (object)Enums.Controls.Save))
因为Controls
的成员是静态的并且在编译时是已知的。你应该能够自己解释一下。
很可能,您发布的代码在关键方面不完整或不正确。
答案 1 :(得分:-2)
经过一些分析后,我尝试了自己,下面的代码工作正常。
从枚举中创建匿名对象,如下所示
object saveAction= new
{
c = (int)Enums.Controls.Save,
t = Enums.Controls.Save.ToString()
};
object submitAction = new
{
c = (int)Enums.Controls.Submit,
t = Enums.Controls.Submit.ToString()
};
if (actions.Exists(a => a.Equals(saveAction)))
{
actions.Remove(submitAction);
}
等于仅工作而非“==”。请参阅以下链接
http://www.informit.com/articles/article.aspx?p=1237024&seqNum=4