首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在C# 2.0中使用Invoke调用时,从null转换为DateTime.MinValue的参数

在C# 2.0中使用Invoke调用时,从null转换为DateTime.MinValue的参数
EN

Stack Overflow用户
提问于 2009-12-11 17:51:20
回答 6查看 479关注 0票数 4

我的代码有点像这样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyObject
{
    private bool IsValidDay(ref DateTime theDate)
    {

    ...
    }
}


MethodInfo[] methods = myObjectInstance.GetType().GetMethod("IsValidDay", BindingFlags.Instance | BindingFlags.NonPublic);
object[] args = { null };
bool val = (bool)method.Invoke(myObjectInstance, args);

但是当从IsValidDay方法内部调用该方法时,theDate为DateTime.MinValue。这看起来非常奇怪--我可能希望抛出一个NullReferenceException,而不是一个自动转换。

如果你想知道,这是单元测试中的代码。(在使用中,该方法通常通过接受对象的公共方法调用)。

至于随后调用的其他代码,DateTime.MinValue和null不是一回事,所以这是一个小问题。

有什么线索吗?建议。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-12-14 11:02:27

最后,在这种情况下,我认为我将采用方法实际上不需要测试与null的概念,并注意到通过反射调用方法并不总是抛出异常,而直接的函数调用会抛出异常。

其他人可能会发现nullable类型的建议很有用(尽管我想现在每个人都已经理解这些了……)

票数 -1
EN

Stack Overflow用户

发布于 2009-12-11 17:54:24

DateTime变量不能为null。它不是引用类型,所以不会有空引用异常。

你可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private bool IsValidDay(ref DateTime? theDate)
{
   if(theDate.HasValue)...
}

这里有一个关于可空类型的链接:http://msdn.microsoft.com/en-us/library/1t3y8s4s%28VS.80%29.aspx

我想我明白你的要求了.在你的代码中(特别是因为有ref参数,你不能用ref或out来改变参数)。它必须传入一个DateTime对象。它不能是任何空参数,必须将else.....so参数转换为某个值才能使函数工作。

票数 3
EN

Stack Overflow用户

发布于 2009-12-11 18:02:42

来自MSDN

此数组中未显式初始化的任何对象都将包含该对象类型的默认值。对于引用类型的元素,此值为null。对于值类型元素,此值为0、0.0或false,具体取决于特定的元素类型。

DateTime的缺省值为DateTime.MinValue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DateTime.MinValue == new DateTime() // true

这就解释了为什么在使用null调用方法时,DateTime.MinValue会被传递给该方法。

请注意,当您在没有反射的情况下调用方法时,无论如何都不能将null传递给该方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DateTime dt = null; // cannot assign null to value type
obj.IsValidDay(ref dt);

所以我认为你不需要用引用来测试你的方法。

如果您希望您的方法接受null,您可以将声明更改为DateTime?,正如其他人已经指出的那样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private bool IsValidDay(ref DateTime? dt) { ... }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1889749

复制
相关文章
C#中Invoke的用法()
一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解。
vv彭
2020/12/11
2.3K0
C#中的invoke方法
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往会想当然地这么写:
全栈程序员站长
2022/08/31
1.7K0
c#中Invoke方法
invoke方法的初衷是为了解决在某个非某个控件创建的线程中刷新该控件可能会引发异常的问题。说的可能比较拗口,举个例子:主线程中存在一个文本控件,在一个子线程中要改变该文本的值,此时会有可能引发异常。
全栈程序员站长
2022/07/01
1.2K0
对象不再使用时,为什么要赋值为 null ?
许多Java开发者都曾听说过“不使用的对象应手动赋值为null“这句话,而且好多开发者一直信奉着这句话;问其原因,大都是回答“有利于GC更早回收内存,减少内存占用”,但再往深入问就回答不出来了。
用户4283147
2022/10/27
5270
对象不再使用时,为什么要赋值为 null ?
转: Tomcat 调优及 JVM 参数优化
http://blog.chopmoon.com/favorites/231.html
Dream城堡
2019/07/01
1K0
转: Tomcat 调优及 JVM 参数优化
Java : 对象不再使用时,为什么要赋值为 null ?
原文链接:http://www.polarxiong.com/
业余草
2019/12/03
1.2K0
C#中Parallel类For、ForEach和Invoke使用介绍
Parallel类提供了数据和任务的并行性; Paraller.For()方法类似于C#的for循环语句,也是多次执行一个任务。使用Paraller.For()方法,可以并行运行迭代,迭代的顺序没有定义。在For()方法中,前两个参数是固定的,这两个参数定义了循环的开头和结束。首先描述它的第一个方法For(int,int,Action<int>),前面两个参数代表循环的开头和介绍,第三个参数是个委托,整数参数是循环的迭代次数,该参数被传递给委托引用的方法。Paraller.For()方法的返回类型是ParallelLoopResult结构,它提供了循环是否结束的信息和最低迭代的索引(返回一个表示从中调用 Break 语句的最低迭代的整数)。
用户9127601
2022/11/28
3K0
C#中Parallel类For、ForEach和Invoke使用介绍
从 “x is null 和 x == null” 的区别看 C# 7 模式匹配中常量和 null 的匹配
发布于 2017-11-06 15:24 更新于 2018-02-19 22:39
walterlv
2018/09/18
1.3K0
invoke和begininvoke 区别——c#
      https://www.cnblogs.com/worldreason/archive/2008/06/09/1216127.html
vv彭
2020/12/16
2.7K0
invoke和begininvoke 区别——c#
C# 从 short 转 byte 方法
通过BitConverter 可以将大量的类转换为 byte 包括 short 的方法
林德熙
2022/08/04
9150
在PowerShell中使用curl(Invoke-WebRequest)
前言 习惯了windows的界面模式就很难转去命令行,甚至以命令行发家的git也涌现出各种界面tool。然而命令行真的会比界面快的多,如果你是一个码农。 situation:接到需求分析bug,需要访问http。那台机器属于product,不允许装postman。我只能手动命令行来发请求。发现了内置的PowerShell中有curl命令。欢喜试了半天,总是命令不对,google发现这个curl是冒名顶替的,只是一个Invoke-WebRequest的alias。参考。 PS> Get-Alias -Defi
Ryan-Miao
2018/03/13
5K0
在 React 16 中从 setState 返回 null 的妙用[每日前端夜话0x7D]
在 React 16 中为了防止不必要的 DOM 更新,允许你决定是否让 .setState 更来新状态。在调用 .setState 时返回 null 将不再触发更新。
疯狂的技术宅
2019/06/11
14.6K0
如何使用高大上的方法调参数
本文主要介绍作者与 Elad Hazan, Adam Klivans 合作的最新论文: Hyperparameter Optimization: A Spectral Approach(https://arxiv.org/abs/1706.00764) 那么,在介绍具体算法之前,我们先要理解一个很重要的问题: 调参数这个东西,关我 x 事? 因为它非常有用。 调参数是指这么个问题:你有 n 个参数,每个参数需要赋一个值。赋完值之后,你用这些参数做一个实验,可以看到一个结果。根据这个结果,你可以修改你
AI研习社
2018/03/19
4.3K0
如何使用高大上的方法调参数
接收参数为null的问题
今天遇到了这样一个问题:Controller层接收到前端传入的参数,传给Service层去使用MyBatis-Plus的xml中查询数据库,结果,在数据库的xml中并没有接收到Service层传过来的参数,参数是一个尴尬的null,这时我就想,好你个前端,你不讲武德,你怎么给我传个null,我劝你耗子尾汁!
关忆北.
2021/12/07
1.6K0
C# this.invoke()作用 多线程操作UI
Invoke()的作用是:在应用程序的主线程上执行指定的委托。一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke();
zls365
2020/08/19
3.8K0
Java之invoke与方法参数注解
上一节中我们说了Java之中非常主要的一个实例---注解的入门,这节我们结合反射中的invoke动态调用看看注解的作用域问题
大话swift
2019/09/17
3.5K0
Java之invoke与方法参数注解
C#: 不同的方式检查Null
检查参数值是否为空的经典方法是什么?如果您已经使用C语言开发了一段时间,您可能会熟悉以下经典语法:
沙漠尽头的狼
2021/12/01
5110
C#: 不同的方式检查Null
检查参数值是否为空的经典方法是什么?如果您已经使用C语言开发了一段时间,您可能会熟悉以下经典语法:
JusterZhu
2022/12/07
4430
回发或回调参数无效。在配置中使用 <pages enableEventValidation=”true”/> 或在页面中使用 <%@ Page EnableEventValidation=”true”
回发或回调参数无效。在配置中使用 <pages enableEventValidation=”true”/> 或在页面中使用 <%@ Page EnableEventValidation=”true” %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
全栈程序员站长
2022/09/15
1.7K0
点击加载更多

相似问题

C#、WCF和DateTime.MinValue()与Null日期

10

使用P/Invoke时使用带参数的回调函数

16

C# P/Invoke: Varargs委托回调

69

将DateTime.MinValue中的C#替换为sql

13

将0转换为null

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文