在C#中正确处理用户主体

本文关键字:用户主体 正确处理 | 更新日期: 2023-09-27 18:28:14

我有下面的代码,它基本上为用户返回显示名称。我正在使用using关键字来正确处理PrincipalContextUserPrincipal

我的问题是,由于结果指向user.DisplayName,一旦UserPrincipal被释放,结果将指向null或被释放的对象。我不认为立即使用处置对象只会标记为一次性,一旦需要更多内存,就会处置标记的对象。

private string GetWindowsDisplayName()
{
    string result = string.Empty;
    using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
    {
        using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, principal.Identity.Name))
        {
            if (user != null) 
                result = user.DisplayName;
        }
    }
    return result;
}

在C#中正确处理用户主体

结果指向用户。DisplayName

不,没有。

存储在user.DisplayName中的复制到result。您返回的只是那个值,到那时它与user对象无关。

你可以用这样的东西来演示这个概念:

var first = "one";
var second = first;
second = "two";
// here, "first" still equals "one"