以下共享点代码试图列出所有用户配置文件属性及其值
class Program
{
static void Main(string[] args)
{
using (SPSite site = new SPSite(args[0], SPUserToken.SystemAccount))
{
var profileManager = new UserProfileManager(SPServiceContext.GetContext(site));
UserProfile userProfile = profileManager.GetUserProfile(args[1]);
foreach (var Property in userProfile.Properties)
{
Console.WriteLine("Property DisplayName = " + Property.DisplayName + "; " + "Property Name = " + Property.Name);
if (userProfile[Property.Name] != null)
{
Console.WriteLine("user profile property value " + Property.Name + " is not null");
Console.WriteLine("property Value = " + userProfile[Property.Name].ToString());
}
else
{
Console.WriteLine("property Value = null");
}
}
}
}
}
这会产生以下输出:
这表示异常即将发生,它试图检查用户配置文件属性值是否为空
if (userProfile[Property.Name] != null)
但我已将它与null进行比较。那么为什么它会给出对象为空的错误呢?
有人可以澄清一下吗?
userProfile不为null,Property.Name也不为null,我正在检查userProfile [Property.Name]!= null。但它会因错误而爆炸。 到底是怎么回事?
答案 0 :(得分:1)
您假设userProfile [Property.Name] .Value不为null。试试这个
if (userProfile[Property.Name] != null
&& userProfile[Property.Name].Value != null)
{
Console.WriteLine("property Value = " + userProfile[Property.Name].Value.ToString());
}
答案 1 :(得分:0)
在这一行:
if (userProfile[Property.Name] != null)
当Property
为空时,尝试从空值中获取.Name
会抛出NullReferenceException
。