C#检查对象是否为null - 结果很奇怪

时间:2016-05-20 02:21:46

标签: c# sharepoint-2013

以下共享点代码试图列出所有用户配置文件属性及其值

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");
                }
            }
        }
    }
}

这会产生以下输出:

output

这表示异常即将发生,它试图检查用户配置文件属性值是否为空

if (userProfile[Property.Name] != null)

但我已将它与null进行比较。那么为什么它会给出对象为空的错误呢?

有人可以澄清一下吗?

userProfile不为null,Property.Name也不为null,我正在检查userProfile [Property.Name]!= null。但它会因错误而爆炸。 到底是怎么回事?

2 个答案:

答案 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