如果某个属性不存在则程序崩溃,下面是我的代码,如何在不对每个属性执行try / catch的情况下捕获并转移到下一个字段?
DirectoryEntry usr = new DirectoryEntry("LDAP://" + domain,username,password);DirectorySearcher searcher = new DirectorySearcher(usr);searcher.Filter = "(sAMAccountname=" + GlobalClass.strUsername + ")";searcher.CacheResults = false;searcher.SearchScope = SearchScope.Subtree;searcher.PropertIEsToload.Add("givenname");searcher.PropertIEsToload.Add("telephoneNumber");//program crashes here if telephoneNumber attribute doesn't exist.textBoxFirstname.Text = usr.PropertIEs["telephoneNumber"].Value.ToString();解决方法 只检查usr.PropertIEs [“telephoneNumber”]将无法正常工作.您必须检查实际值.发生错误的原因是因为您在Value上调用ToString(),该值为null.
无论输入到集合索引器中的属性名称如何,user.PropertIEs将始终返回PropertyValueCollection.
即
var pony = usr.PropertIEs["OMG_PONIES"]; // Will return a PropertyValueCollectionvar value = pony.Value; // Will return null and not error
您需要检查值本身,通过null合并运算符的最佳方法:
textBoxFirstname.Text = (usr.PropertIEs["telephoneNumber"].Value ?? "Not found").ToString();总结
以上是内存溢出为你收集整理的C#测试为null全部内容,希望文章能够帮你解决C#测试为null所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)