DateTime mydt = new DateTime();
mydt = Convert.ToDateTime(com.Decrypt(Request.QueryString["Time"].ToString(), com.KeyCode.ToString()));
我做错了什么?它给出了NullReferenceException。
答案 0 :(得分:4)
嗯,很难确切地说出发生了什么,因为你已经在一个声明中发现了很多的内容。
作为调试的简单帮助,将该语句分解为几个单独的语句 - 这将使得更容易找出出错的地方。 (另请注意,您的初始值mydt
无论如何都会在下一个语句中被覆盖,因此没有任何意义。)
以下是重写代码的方法:
// This already returns a string... you don't need to call ToString() on it
string encryptedTime = Request.QueryString["Time"];
// We don't know what "com" is here...
string key = com.KeyCode.ToString();
string decryptedTime = com.Decrypt(encryptedTime, key);
DateTime mydt = Convert.ToDateTime(decryptedTime);
(我通常也会使用DateTime.TryParseExact
,但这是另一回事。)
答案 1 :(得分:4)
当您尝试访问空引用的成员时,会发生NullReferenceException。
如果您有一系列成员访问(使用'。'运算符)并且任何引用为null,则会发生这种情况。
其中任何一个都可以为null:
com
Request.QueryString["Time"]
com.KeyCode
您可以通过在此行上使用断点停止来调试此功能(单击该行,按F9键),然后将鼠标悬停在上面列表中的每个项目上。其中一个必然是null。
以下是您重新编写代码的方法,以便更轻松地阅读和调试这些问题:
DateTime mydt; // You don't need to initialize this with a new DateTime
if (com == null)
{
// Do something else, since nothing below this will work
}
var keyCode = com.KeyCode;
var time = Request.QueryString["Time"];
if (keyCode == null || time == null)
{
// Do something else, since nothing below this will work
}
mydt = Convert.ToDateTime(com.Decrypt(time.ToString(), keyCode.ToString()));
答案 2 :(得分:2)
这里有许多可能的空引用,但最可能的是时间查询字符串变量。确保它存在。
另外,你的com变量是否已设置?还有com.KeyCode? p>
答案 3 :(得分:1)
有几件事可以为空......
com, Request.QueryString["Time"], com.KeyCode
设置断点并找出;)
答案 4 :(得分:0)
您的一个对象为null,当您尝试访问null为的对象的属性时,您会收到NullReferenceException。
将代码分成多行并进行测试,因为com
,Request.QueryString["Time"]
或com.KeyCode
为空。
答案 5 :(得分:0)
NullReferenceException来自对具有null值或不具有有效值的对象的操作。在对它们进行操作之前,您需要检查该对象是否具有有效值。
如果你从任何检查它有效的东西解析它,如果值无效,那么他在.net
中将对象设置为null答案 6 :(得分:0)
正如其名称所示,抛出NullReferenceException是因为您正在调用null上的方法或属性。
因此,您需要在正在测试的页面中调试该表达式以查看哪个对象在运行时为空。
我们没有足够的信息直接回答您的问题。但...
查询字符串中可能没有“时间”参数?
您的变量com可能为null?是否正确实例化了?
由于我们没有看到您正在呼叫的页面,我们无法分辨。
然后启动visual studio并在那里调试表达式。由于各种原因,任何人都可能为空。
NullReference实质上意味着当该对象为null时,您正在使用对象的引用。