无法将Lambda函数移回正常函数

时间:2017-08-16 14:51:32

标签: c# lambda

我正在使用以下代码段对Azure目录进行身份验证:

//Client ID values
string applicationId = ***;
string applicationSecret = ***;

 var client = new KeyVaultClient
 (
     async (authority, resource, scope) =>
     {
         var adCredential = new ClientCredential(applicationId, applicationSecret);
         var authenticationContext = new AuthenticationContext(authority, null);
         return (await authenticationContext.AcquireTokenAsync(resource, adCredential)).AccessToken;
     }
);

这将创建一个KeyVaultClient,该目录已通过身份验证。

我的问题是,当我尝试将这个lambda函数移动到常规函数时,就像这样:

string authority = "";
ClientCredential adCredential = new ClientCredential(applicationId, applicationSecret);
AuthenticationContext authenticationContext = new AuthenticationContext(authority, null);

这就是我的问题似乎存在的地方。无法设置AuthenticationContext,因为权限字符串为空。但是这怎么可能在lambda函数中起作用而不在它之外,它看起来像lambda函数中的权限字符串也是空白的?有问题的项目是为测试而创建的,因此它没有任何可以使用的定义。有人知道发生了什么让lambda工作吗?

1 个答案:

答案 0 :(得分:1)

没有lambda的代码等价于

public static async Task<string> AuthenticationCallback(string authority, string resource, string scope) {
    var adCredential = new ClientCredential(applicationId, applicationSecret);
    var authenticationContext = new AuthenticationContext(authority, null);
    return (await authenticationContext.AcquireTokenAsync(resource, adCredential)).AccessToken;
}

var client = new KeyVaultClient(AuthenticationCallback);

请记住,KeyVaultClient需要KeyVaultClient.AuthenticationCallback Delegate作为参数。

不确定为什么要使用内联代码行替换lambda(相当于对函数的调用) - 当然,lambda将在稍后使用相关参数调用,而您的内联代码在站点上执行(在您的问题中没有明确说明)