【发布时间】:2018-02-14 00:04:18
【问题描述】:
我正在尝试创建一个 bool 属性来切换 pwdLastSet 属性。
public bool UserMustChangePassword
{
get { return (long)Entry.Properties["pwdLastSet"].Value == 0; }
set
{
if (value)
{
Entry.Properties["pwdLastSet"].Value = 0;
}
else
{
Entry.Properties["pwdLastSet"].Value = -1;
}
}
}
我可以成功设置属性但是我无法读取属性。我不断收到以下铸造错误。
System.InvalidCastException: '指定的强制转换无效。'
是否有读取此属性的特定方法。我知道UserPrincipal 可能是可能的,但是我想使用DirectoryEntry 来保持代码一致。
编辑:在投射前检查 null
public bool UserMustChangePassword
{
get
{
var value = Entry.Properties["pwdLastSet"].Value;
if (value != null)
return (long)Entry.Properties["pwdLastSet"].Value == 0;
return false;
}
set
{
if (value)
{
Entry.Properties["pwdLastSet"].Value = 0;
}
else
{
Entry.Properties["pwdLastSet"].Value = -1;
}
}
}
【问题讨论】:
-
需要在 getter 中检查 null,不能将 null 转换为 long。
-
@kennyzx 我曾想过。不幸的是,我仍然遇到同样的错误。我也无法将其转换为(长?)
-
展示如何在投射前检查 null。
-
Value 属性的类型是什么?它可以是长以外的东西吗?
-
@kennyzx 见上文
标签: c# active-directory ldap directoryservices directoryentry