网友ProfK问:
假如我有一个匿名类型
或者动态类型
,它的结构定义和我的一个强类型的结构是一致的,请问 C# 中是否有内置的方法可以强转为指定 强类型
?
我知道可以使用 AutoMapper
,但这有点重量级了,并且实现起来也稍微繁琐。
网友Grimace of Despair回答:
你可以先序列化为中间格式,然后在后续的某个时刻再反序列化为正确的类型,虽然这不是高效率的方式,但肯定是非常灵活的实现方式,参考如下代码:
Just So So ...
网友ProfK问:
假如我有一个匿名类型
或者动态类型
,它的结构定义和我的一个强类型的结构是一致的,请问 C# 中是否有内置的方法可以强转为指定 强类型
?
我知道可以使用 AutoMapper
,但这有点重量级了,并且实现起来也稍微繁琐。
网友Grimace of Despair回答:
你可以先序列化为中间格式,然后在后续的某个时刻再反序列化为正确的类型,虽然这不是高效率的方式,但肯定是非常灵活的实现方式,参考如下代码:
网友Omar Abid问?
我想通过代码获取当前的电脑屏幕并保存为一张图片,就好像键盘的 截屏
按钮功能,请问这该如何实现?我没有好思路。
网友Gary Willoughby回答:
如果你的程序是 framework >2.0
的话,完全可以使用 CopyFromScreen()
方法,参考如下代码:
说了.NET 6 中的DateOnly类型,再说说TimeOnly类型
TimeOnly 结构体用于表示与日期无关的时间。例如,想象一下创建一个闹钟应用程序,让用户创建一个重复发生的闹钟。在这种情况下,我们想要存储闹钟应该响起的时间,但日期无关紧要。
TimeOnly 类型有几个构造函数重载。我希望大多数开发人员使用的更常见的允许我们创建一个日期,接受时间的小时和分钟,小时,分钟和秒,或小时,分钟,秒和毫秒。
public TimeOnly(int hour, int minute)
public TimeOnly(int hour, int minute, int second)
public TimeOnly(int hour, int minute, int second, int millisecond)
在.NET 6中,引入了这种期待已久的类型作为核心库的一部分。DateOnly允许开发人员表示 DateTime 的日期部分。这种新类型是结构体(值类型),可以在您的代码独立处理日期概念时使用。这种类型都可以在 System 命名空间中找到。使用这些新类型可能与数据库允许表示类似数据的方式很好地保持一致。具体来说,这些类型与 SQL Server 日期和时间数据类型非常吻合。
这些类型对于它们所代表的内容几乎是不言自明的。当我们需要表示没有时间组件的日期时,我们可以使用 DateOnly。例如,也许我们在应用程序中代表某人的出生日期。在这种情况下,我们很少需要使用 DateTime 的时间部分,标准的解决方案是将时间设置为 00:00:00.000。使用 DateOnly,我们可以更明确地说明我们的意图。
我们可以在 DateOnly 上构造一个实例,将年、月和日作为参数传递:
var date = new DateOnly(2020, 04, 20);
这将创建一个表示 2020 年 4 月 20 日的 DateOnly。在内部,DateOnly 结构使用一个整数来跟踪有效范围为 0(映射到 0001 年 1 月 1 日到 3,652,058,映射到 9999 年 12 月 31 日)的日数。
用Convert.Toint32()给小数转换成整数时,会四舍五入。比如:
Convert.Toint32(4.1) = 4
Convert.Toint32(4.3) = 4
Convert.Toint32(4.51) = 5
Convert.Toint32(4.6) = 5
但是,如果小数后面是.5 或者.50 之类的中间数,转换后的结果就让大家意向不到了。总之,结果是:
如果value为两个整数中间的数字,则返回二者中的偶数。
比如Convert.Toint32(3.5)
,3.5是整数3和4之间的数,此时取偶数4
比如Convert.Toint32(4.5)
,4.5是整数4和5之间的数,此时取偶数4