RouteData.Values当查询字符串不存在时返回NullReferenceException

时间:2012-05-10 11:55:26

标签: c# routing

我如何处理以下语句的NullReferenceException,因为如果在使用URL路由时查询字符串中不存在以下语句,则会出现空异常错误

string lang = RouteData.Values["Language"].ToString();

错误详情

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

3 个答案:

答案 0 :(得分:4)

您收到此异常是因为RouteDate.Values [" Language"]为空,并且您正在对其应用实例方法.ToString。
只需添加一个if来检查null

string lang="";
if(RouteData.Values["Language"] != null)
      lang = RouteData.Values["Language"].ToString();

答案 1 :(得分:3)

较新版本的.NET支持:

string lang = (RouteData.Values["Language"] ?? String.Empty).ToString();

对其他数据类型也很方便:

int langId = Convert.ToInt32(RouteData.Values["LanguageId"] ?? 0);

答案 2 :(得分:1)

试试这个:

string lang = RouteData.Values["Language"] != null
                   ? RouteData.Values["Language"].ToString()
                   : String.Empty;