按名称访问列表项以分配给变量

时间:2018-04-06 13:53:49

标签: c# asp.net .net asp.net-mvc asp.net-core

我确信这个问题的答案无处不在,但我很难找到它,也许我没有正确地写出来?

我有一个显示的项目列表:

enter image description here

我想做的事情是:

var phoneNo = res("phone_number").Value;

但实际的语法是什么?

编辑: 这是我试图取得成功的事情:

enter image description here

3 个答案:

答案 0 :(得分:1)

看起来您正试图从索赔中获取价值。你可以这样做:

 var userClaims = context.HttpContext.User as ClaimsPrincipal; 

让您声明价值:

 if (userClaims.Claims.Where(x => x.Type == "phone_number").FirstOrDefault() != null)
 {
       var phoneNumberClaim = User.Claims.Where(x => x.Type == "phone_number").FirstOrDefault().Value;
 }

答案 1 :(得分:0)

这种任务的编程有一种特殊的结构。它被称为字典。

我认为您的ToClaims方法应返回Dictionary,因此您可以通过所需的任何键访问值。您也可以使用.ToDictionary(...)投射列表,您可以在其中按":"分割字符串以获取键和值。

答案 2 :(得分:0)

根据给出的反馈,我想展示我从中获得的两种最佳方法。

我采用的方法:

//set up a dictionary
var claims = ctx.User.ToClaims().ToDictionary(claim => claim.Type, claim => claim.Value);

//access as follows
var phoneNo = claims["phone_number"];
var firstName = claims["given_name"];

//etc.

另一个好方法:

//set up IEnumerable
var claims = ctx.User.ToClaims();

//access as follows
var phoneNos = claims.FirstOrDefault(c => c.Type == "phone_number")?.Value;
var firstName = claims.FirstOrDefault(c => c.Type == "given_name")?.Value;

//etc.