考虑一个例子:
class Test {
string S { get; set; }
public Test() {
Init();
}
private void Init() {
S = "hello";
}
}
Run Code Online (Sandbox Code Playgroud)
使用可空 C# 项目功能,此示例将触发编译器警告:
警告 CS8618 退出构造函数时,不可为 null 的属性“S”必须包含非 null 值。考虑将该属性声明为可为空。
但是,退出构造函数时,该属性确实包含非空值,只是不是直接在构造函数中设置,而是在从构造函数无条件调用的方法中间接设置。
这个例子清楚地表明该属性不可能为S
空。Test
创建类的实例时,Init()
将无条件调用该方法,因此该S
属性始终设置为“hello”。
当然,这个警告可以在代码中被抑制,但这看起来很丑陋。这是告诉编译器我确实S
在其他地方将该属性设置为非空值的更好方法吗?
顺便说一句,如果您真的想知道为什么要在构造函数中间接设置值,让我们考虑一下类型D
的另一个派生属性Derived
。要创建字符串的实例,Derived
必须首先解析字符串,我们不想每次读取属性时都解析字符串D
。
因此,更实际的代码看起来更像是这样的:
class Test {
public string S {
get => _S;
set => D = new Derived(_S = value);
}
public Derived D { …
Run Code Online (Sandbox Code Playgroud) 我正在学习 CameraX,CameraXBasic是示例代码。
我写了一个基于zoomX函数的CameraFragment.kt。你可以看到代码A。我认为该功能可以随时放大图片。
我发现一个画面可以当我是变焦调用它与SA小的值,例如zoomX(2f)
,zoomX(3f)
,但画面不会放大当我再次用大值,比如zoomX(6.0f)
,zoomX(7.0f)
为什么?
代码 A
private lateinit var viewFinder: TextureView
private var preview: Preview? = null
fun zoomX(orign: Float ){
val x=orign+1
val singleWidth=viewFinder.width/x
val singleHeight=viewFinder.height/x
val left=viewFinder.width/2f-singleWidth/2f
val right=left+singleWidth
val top=viewFinder.height/2f-singleHeight/2f
val bottom=top+singleHeight
val my= Rect(left.toInt(), top.toInt(), right.toInt(), bottom.toInt())
preview?.zoom(my)
}
Run Code Online (Sandbox Code Playgroud) 我尝试在Apple M1 chip
MacBook上运行 android 模拟器,但它不起作用,AVD 管理器显示错误消息:无法启动 AVD。看来这个问题的根源是 M1 芯片不支持虚拟化,而 AVD 需要 VT-x 来处理 x86 图像。大多数图像都是基于 x86 的,并且没有为最新的 android 版本提供基于 arm 的图像。有没有办法绕过这个问题?(使用物理设备和旧图像除外)
我有兴趣为Samsung Galaxy Watch 4 (Wear OS)开发血压监测器应用程序(仅限 Android)。我在互联网上搜索过,但找不到任何文档或 API 可以做到这一点。我知道如果不先用血压计校准手表就不可能测量血压。
可以使用三星的Health SDK吗?
我只能找到这个可能对我有帮助的链接。
我的表单上有 DatePicker;
我正在使用这个包:[ https://reactdatepicker.com/#example-specific-time-range][1]
在选择开始日期上:我想禁用当前时间之前的所有时间。那么如果现在是凌晨 3 点。之前的时间(凌晨 2 点、凌晨 1 点、中午 12 点)将被禁用。
通常,它是这样的:但是这里他们写的是静态时间,我想在那里添加当前时间的当前小时。
<DatePicker
selected={startDate}
onChange={date => setStartDate(date)}
showTimeSelect
minTime={setHours(setMinutes(new Date(), 0), 17)}
maxTime={setHours(setMinutes(new Date(), 30), 20)}
dateFormat="MMMM d, yyyy h:mm aa"
/>
Run Code Online (Sandbox Code Playgroud)
所以我看到了一些关于这个的例子并尝试了这个:
const now = moment().toDate();
<DatePicker
selected={this.state.startDate}
onChange={event => this.getStartDate(event)}
showTimeSelect
timeFormat="haa"
timeIntervals={60}
minDate={now}
minTime={now.hours(now.hour()).minutes(now.minutes())}
maxTime={now.hours(23).minutes(45)}
dateFormat="MM/d/yyyy hhaa"
timeCaption="Hour"
/>
Run Code Online (Sandbox Code Playgroud)
但什么也没发生。我哪里出错了?