2017-07-12 17 views
-10

私はC#5にダウングレードしたいと思う何らかの理由により、現在VS 2015(C#6)で書かれたコードを誰かに教えてもらえましたか?ダウングレードC#6.0から5.0へのコード

var idpEntityId = ClaimsPrincipal.Current.FindFirst(AuthServicesClaimTypes.LogoutNameIdentifier)?.Issuer ?? ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier)?.Issuer; 

私は

ClaimsPrincipal.Current.FindFirst(AuthServicesClaimTypes.LogoutNameIdentifier) != null ? ClaimsPrincipal.Current.FindFirst(AuthServicesClaimTypes.LogoutNameIdentifier).Issuer : null; 
?? 
ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier) != null ? ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Issuer : null; 

に変換しかし、私はまだ誰が助けることができるしてください??

のエラーを取得していますか?

var idpEntityId = ClaimsPrincipal.Current.FindFirst(AuthServicesClaimTypes.LogoutNameIdentifier)?.Issuer ?? ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier)?.Issuer; 

は、次のC#の以前のバージョンで構築するために翻訳します

+0

'.'のみ6&上記のC#で存在ヌル条件演算子は、あなたif-conditionのヌルチェックとして手動で変換する必要があります。しかし、ヌル・コアレシング「??」はそのままにしておきます。 –

+2

これはコード作成サービスではありません。あなた自身でこれをやってみてください。 – BugFinder

+2

同じ言語の異なるバージョンであっても、このサイトはコード翻訳サービスではないため、このトピックをオフトピックとして閉じるよう投票しています。 –

答えて

2

あなたのワンライナー:

var logoutNameIdentifier = ClaimsPrincipal.Current.FindFirst(AuthServicesClaimTypes.LogoutNameIdentifier); 
var lniIssuer = logoutNameIdentifier != null ? logoutNameIdentifier.Issuer : null; 
var idpEntityId = lniIssuer; 
if (idpEntityId == null) 
{ 
    var ctNameIdentifier = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier); 
    if (ctNameIdentifier != null) 
     idpEntityId = ctNameIdentifier.Issuer; 
} 

かなりより複雑。そこで私は、次の拡張メソッドを書くことを考えた:これにより

public static U NonNullMap<T, U>(this T t, Func<T, U> m) 
{ 
    return t != null ? m(t) : default(U); 
} 

次のように、コードはその後になります。私の意見では

var idpEntityId = ClaimsPrincipal.Current 
           .FindFirst(AuthServicesClaimTypes.LogoutNameIdentifier) 
           .NonNullMap(lni => lni.Issuer); 
if (idpEntityId == null) 
    idpEntityId = ClaimsPrincipal.Current 
           .FindFirst(ClaimTypes.NameIdentifier) 
           .NonNullMap(ni => ni.Issuer); 

それでも冗長しかし少なくとも、より読みやすいです、。

編集:??オペレータはC#5.0で動作します場合は、あなたがダウンするコードを短縮することができます?

var idpEntityId = ClaimsPrincipal.Current 
           .FindFirst(AuthServicesClaimTypes.LogoutNameIdentifier) 
           .NonNullMap(lni => lni.Issuer) ?? 
        ClaimsPrincipal.Current 
           .FindFirst(ClaimTypes.NameIdentifier) 
           .NonNullMap(ni => ni.Issuer); 
関連する問題