3

どちらのアプローチがより速く、より適切に使用できるのか、どちらが好きなのか疑問に思います

bool userHavePermission = user.Permissions.Any(x => x.UpperName == "ADMINISTRATOR");

また

foreach (Permission p in _Permissions)
{
    if (p.UpperName == name.ToUpper())
       return true;
}
return false;

ありがとう

4

2 に答える 2

5

これはほぼ同じコードですが、唯一の違いは、2番目のコードスニペットでは、変数がnullインスタンスでメソッドを呼び出すためであるNullReferenceException場合、実行時に取得することです。最初のものはより短く、より安全で、より読みやすく見えます、それは私が使うものです。また、NREが存在しないことを確認するには、次のようにします。namenull.ToUpper()

return user
    .Permissions
    .Any(x => string.Equals(x.UpperName, name, StringComparison.OrdinalIgnoreCase));
于 2013-02-15T22:10:35.253 に答える
1

Anyを使用する方が、1行であるためより適切なアプローチです。読みやすく、占有するスペースも少なくて済みます。

さらに、Permissionsオブジェクトが何であるかは不明ですが、データベーステーブルを表す何らかのエンティティである場合は、反復が開始する前にforeachがアクセス許可のリスト全体を解決するクエリの結果のみを返すため、Anyの方が間違いなく優れています。 。

于 2013-02-15T22:13:57.717 に答える