behaviorManager1 = new DevExpress.Utils.Behaviors.BehaviorManager();
behaviorManager1.Attach<DevExpress.Utils.DragDrop.DragDropBehavior>(editor.GridView, behavior => {
behavior.Properties.AllowDrop = true;
behavior.Properties.InsertIndicatorVisible = true;
behavior.Properties.PreviewVisible = true;
behavior.DragOver += Behavior_DragOver;
behavior.DragDrop += Behavior_DragDrop;
});
为了更好地理解,我想重构代码,以便“behavior =&gt;”代码不符合。
我尝试过:
var behaviour = new DragDropBehavior(ctrl.GetType());
behaviour.DragDrop += Behavior_DragDrop;
behaviour.DragOver += Behavior_DragOver;
var action = new Action<DragDropBehavior>(behaviour); // compile error
behaviorManager1.Attach(gridView1, action);
但是,我收到编译错误
错误CS0149预期的方法名称
答案 0 :(得分:1)
初始代码的作用与新代码的作用有所不同。最初你传入一个匿名函数,调用它时会在提供的DragDropBehavior
实例上设置一些属性。您的新代码会明确创建DragDropBehavior
的实例,并将其填满。
您还尝试创建Action<T>
的实例,该实例需要一个委托,而是将其传递给新创建的对象。这就是编译器不喜欢它的原因。
您仍然可以将该参数提取到变量中,但应将其键入为Action<DragDropBehavior>
,并且所有赋值都应位于匿名函数中:
behaviorManager1 = new DevExpress.Utils.Behaviors.BehaviorManager();
Action<DragDropBehavior> behaviorDelegate = behavior => {
behavior.Properties.AllowDrop = true;
behavior.Properties.InsertIndicatorVisible = true;
behavior.Properties.PreviewVisible = true;
behavior.DragOver += Behavior_DragOver;
behavior.DragDrop += Behavior_DragDrop;
};
behaviorManager1.Attach<DevExpress.Utils.DragDrop.DragDropBehavior>(editor.GridView, behaviorDelegate);