0

我在 c# 中遇到字符串操作问题。请检查以下表达式:

public static string UNID =  ((Thread.CurrentPrincipal as ClaimsPrincipal).Identity as ClaimsIdentity)
.Claims.Single(c => c.ClaimType.Contains("nameidentifier")).Value.Substring( //issue is here

我想指向子字符串函数中的值,以便在其上应用 indexOf 函数。我尝试了this关键字但不起作用:

public static string UNID =  ((Thread.CurrentPrincipal as ClaimsPrincipal).Identity as ClaimsIdentity)
.Claims.Single(c => c.ClaimType.Contains("nameidentifier")).Value.Substring(this.IndexOf('/') + 1);

我知道我们可以通过将表达式分解为以下部分来做同样的事情:

var value = ((Thread.CurrentPrincipal as ClaimsPrincipal).Identity as ClaimsIdentity)
.Claims.Single(c => c.ClaimType.Contains("nameidentifier")).Value;

var UNID = value.Substring(value.IndexOf('/') + 1);

但是,如果有任何解决方案,就像我尝试使用this关键字一样。然后请告诉我?

4

2 回答 2

4

就我个人而言,我认为将它作为两条单独的线是最好的方法,但如果你死定在一条线上,你可以使用它Split。第二个参数表示您只想在第一个分隔符上进行拆分。

var UNID = ((Thread.CurrentPrincipal as ClaimsPrincipal).Identity as ClaimsIdentity)
    .Claims.Single(c => c.ClaimType.Contains("nameidentifier"))
    .Value.Split(new[] {'/'}, 2)[1];
于 2013-01-29T14:08:12.773 回答
3

这应该有效:

public static string UNID =  ((Thread.CurrentPrincipal as ClaimsPrincipal).Identity as ClaimsIdentity).Claims
  .Where(c => c.ClaimType.Contains("nameidentifier"))
  .Select(c => c.Value.Substring(c.Value.IndexOf('/')+1))
  .Single();
  • 首先选择请求的声明类型
  • 然后将其转换为正确的值子字符串
  • 并取唯一的(预期的)值
于 2013-01-29T14:14:19.790 回答