[英]Using methods as parameters in C# without delegates?
我正在查看一些知识渊博的同事编写的代码,并且遇到了一种令我感到困惑的技术。 这是一段代码...
public class TaxController : ApiController
{
private StateTaxApi taxApi = new taxApi();
[HttpGet]
public async Task<IEnumerable<String>> GetStatesOwedTax(String taxId, String clientId)
{
try
{
return await taxApi.GetStatesOwedTax(clientId, GetTaxId(), GetClientId());
}
catch (Exception e)
{
throw new ApiException(HttpStatusCode.BadRequest, "Could not get tax states", e);
}
}
private String GetClientId()
{
try
{
return Request.Headers.GetValues("client-id").FirstOrDefault();
}
catch (InvalidOperationException e)
{
// TODO: Handle error here
}
return null;
}
private String GetTaxId()
{
return GetSessionValue("taxId") as String;
}
private Object GetSessionValue(String key)
{
var context = Request.Properties["MS_HttpContext"] as HttpContextWrapper;
var session = context.Session;
return session[key];
}
}
在这里,您可以看到方法作为参数传递给方法GetStatesOwedTax()
:
return await taxApi.GetStatesOwedTax(clientId, GetTaxId(), GetClientId());
我认为唯一的方法就是使用委托来表示要作为参数传递的方法。 我没有提到定义代表的Func(string)
。 我想念什么?
该方法未通过,该方法的结果正在通过。 这么简单,我发现一个例子总是更好。
public void Start()
{
var result = DoMath(GetX(), GetY());
}
public int GetX()
{
return 1;
}
public int GetY()
{
return 2;
}
public int DoMath(int x, int y)
{
return x + y;
}
在示例中可以看到, DoMath()
需要将两个int传递给它。 替代
public void Start()
{
var x = GetX();
var y = GetY();
var result = DoMath(x, y);
}
您可以直接在DoMath()
方法的参数中进行方法调用。
现在,这是否更简单,更好,更好/不好的做法都取决于个人风格和整体复杂性。 如果它可读性强,那么您可以通过这样做节省空间,但是这样做确实有使泥泞的水面变得模糊不清的风险。 因此,我不能说您是否应该这样做,只是说您可以做到。
正如Vilx在评论中所提到的那样,一种简单的方法来判断该方法是否通过,而方法的结果则是包含括号。 如果它们在那里(如本例所示),则意味着将对该方法进行评估并使用其结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.