通过动态选择方法使控制器更有效率

本文关键字:控制器 有效率 方法 动态 选择 | 更新日期: 2023-09-27 18:21:29

我的存储库中有以下两种方法:

    public IEnumerable<Post> Posts
    {
        get { return context.Posts; }
    }

    public IEnumerable<Editables> Editables
    {
        get { return context.Editables; 
    }

这是我的方法:

 public ActionResult SaveEdit(int activeid,string text, string prop, string REPOMETHOD)
        {
            var elementToEdit = _repository.<dynamic insert Post or Editable>.ElementAt(activeid);
            var type = elementToEdit.GetType();
            PropertyInfo p = type.GetProperty(prop);
            p.SetValue(elementToEdit, text, null);
            _repository.UpdateBigLinkEdit(elementToEdit, activeid);
            return null;
        }

因此,ii有可能使这个metid更加动态,并插入正确的方法

_repository.Editables.ElementAt(activeid)  OR  _repository.Post.ElementAt(activeid);

通过从我的视野中传递冥王的名字?还是我必须换一种方式?

通过动态选择方法使控制器更有效率

是的,您可以使用通用方法:

public T GetElement<T>(int id)
{
  if (typeof(T) == typeof(Post)) return Posts.ElementAt(id);
  if (typeof(T) == typeof(Editable)) return Editables.ElementAt(id);
  throw new InvalidTypeException();
}

然后使用

var element = _repository.GetElement<Post>(activeId);

如果PostsEditables对象的使用是以用户输入为条件的,则应该有单独的控制器方法来处理每个请求。您仍然可以通过让它们各自调用相同的方法来重用代码:

public ActionResult Save(int activeId, string text)
{
   var elementToEdit = _repository.Posts.ElementAt(activeid);
   return SaveEdit(activeId, text, elementToEdit);
}
public ActionResult Edit(int activeId, string text)
{
   var elementToEdit = _repository.Editables.ElementAt(activeId);
   return SaveEdit(activeId, text, elementToEdit);
}
private ActionResult SaveEdit(int activeId, string text, object elementToEdit)
{
   // logic from your original method
}

如果使用任一对象的条件是而不是取决于用户输入,那么您应该能够在原始代码示例中使用if条件来设置elementToEdit对象。