Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将参数传递到操作中?_C#_Asp.net Mvc - Fatal编程技术网

C# 将参数传递到操作中?

C# 将参数传递到操作中?,c#,asp.net-mvc,C#,Asp.net Mvc,我试图完全理解如何简化以下内容: public ActionResult Create(string ds) { InitializeServices(ds, "0000"); vm.Account = new Account { PartitionKey = "0000", RowKey = "0000", Create

我试图完全理解如何简化以下内容:

    public ActionResult Create(string ds) {
            InitializeServices(ds, "0000");
            vm.Account = new Account {
                    PartitionKey = "0000",
                    RowKey = "0000",
                    Created = DateTime.Now,
                    CreatedBy = User.Identity.Name
            };
        }
        catch (ServiceException ex) {
            ModelState.Merge(ex.Errors);
        }
        catch (Exception e) {
            Trace.Write(e);
            ModelState.AddModelError("", "Database access error: " + e.Message);
        }
        return View("CreateEdit", vm);
    }
     string ds
     System.Web.Mvc.ModelState ModelState  (passed as a reference)
我有几个很好的答案,建议如下:

    private void HandleException(Action action) {
        try { 
            action(); 
        } 
        catch (ServiceException ex) { 
            ModelState.Merge(ex.Errors); 
        } 
        catch (Exception e) 
        { 
            Trace.Write(e); 
            ModelState.AddModelError("", "Database access error: " + e.Message); 
        } 
    } 

    RunAndHandleExceptions(new Action(() =>                 
   {                      
        //Do some computing                 }
    )); 
这看起来是一个非常好的解决方案,但我仍然不明白如何通过我的考试 将参数转换为操作。我需要做的是通过以下考试:

    public ActionResult Create(string ds) {
            InitializeServices(ds, "0000");
            vm.Account = new Account {
                    PartitionKey = "0000",
                    RowKey = "0000",
                    Created = DateTime.Now,
                    CreatedBy = User.Identity.Name
            };
        }
        catch (ServiceException ex) {
            ModelState.Merge(ex.Errors);
        }
        catch (Exception e) {
            Trace.Write(e);
            ModelState.AddModelError("", "Database access error: " + e.Message);
        }
        return View("CreateEdit", vm);
    }
     string ds
     System.Web.Mvc.ModelState ModelState  (passed as a reference)
只是

应该这样做

要获取返回值,您需要一个
Func
,而不是
Action


您最多可以定义16个参数的操作(如果该数字有用,请不要讨论)。所以,酸溜溜的电话可能看起来像:

private void HandleException(Action<string, System.Web.Mvc.ModelState ModelState  > action) {
private void HandleException(操作){
编辑

下面是一个具有参数的操作的示例:

private void RunHandleException(Action<int> action) 
{
    action(someIntValue);
}

...

RunAndHandleExceptions((someInt) => 
    {    
        //Do some computing      
    });  
private void RunHandleException(操作)
{
动作(someIntValue);
}
...
RunAndHandleExceptions((someInt)=>
{    
//做一些计算
});  
下面是一个函数具有返回值的示例:

private void RunHandleException(Func<bool, int> action) 
{
    bool returnValue = action(someIntValue);
}

...

RunAndHandleExceptions((someInt) => 
    {    
        //Do some computing  
        return true;    
    });  
private void RunHandleException(函数操作)
{
bool returnValue=操作(someIntValue);
}
...
RunAndHandleExceptions((someInt)=>
{    
//做一些计算
返回true;
});  

您看过RedirectToAction吗

return this.RedirectToAction(c => c.SomeAction(MyParam));

我添加了mvc标记以使响应不那么奇怪:)注意捕获每个异常是一种糟糕的编程实践。调用堆栈中的某个成员可能已经能够处理该异常。我看到您正在使用“someFunction”。如果这是一个匿名函数,我怎么能给它编码呢?我一直在尝试这样做,但总是会遇到很多语法错误。@SamanthaJ:添加了一个例子,添加了我的答案的底部并修复了它(见注释)。请您澄清一下您的意思。我仍然很困惑:-(@SamanthaJ:我已经更改了我的答案,向您展示了一些示例代码。
return this.RedirectToAction(c => c.SomeAction(MyParam));