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

個人的には、2つの別々の行としてこれを行うのが最善の方法だと思いますが、1つの行に完全に設定されている場合は、Split代わりに使用できます。2番目のパラメーターは、最初の区切り文字でのみ分割することを示します。

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 に答える