小编Squ*_*uti的帖子

C#10 可空模式:如何告诉编译器我在构造函数中间接设置了不可空属性?

考虑一个例子:

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)

c# nullable c#-10.0

11
推荐指数
1
解决办法
3447
查看次数

为什么 CameraX 不能在 Android Studio 中将图片放大到我需要的大小?

我正在学习 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)

android zooming kotlin android-camerax

9
推荐指数
1
解决办法
1335
查看次数

Android 模拟器无法在 Apple M1 芯片上运行

我尝试在Apple M1 chipMacBook上运行 android 模拟器,但它不起作用,AVD 管理器显示错误消息:无法启动 AVD。看来这个问题的根源是 M1 芯片不支持虚拟化,而 AVD 需要 VT-x 来处理 x86 图像。大多数图像都是基于 x86 的,并且没有为最新的 android 版本提供基于 arm 的图像。有没有办法绕过这个问题?(使用物理设备和旧图像除外)

android android-emulator

7
推荐指数
1
解决办法
1万
查看次数

开发适用于 Wear OS 的血压计应用程序(三星 Galaxy Watch 4)

我有兴趣为Samsung Galaxy Watch 4 (Wear OS)开发血压监测器应用程序(仅限 Android)。我在互联网上搜索过,但找不到任何文档或 API 可以做到这一点。我知道如果不先用血压计校准手表就不可能测量血压。

可以使用三星的Health SDK吗?

我只能找到这个可能对我有帮助的链接。

android wearables wear-os samsung-galaxy-watch-4

5
推荐指数
1
解决办法
880
查看次数

React-datepicker minTime 和 maxTime 不起作用

我的表单上有 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)

但什么也没发生。我哪里出错了?

javascript momentjs reactjs react-datepicker

3
推荐指数
1
解决办法
1万
查看次数