小编eik*_*kuh的帖子

EF Core 模型类:对所有属性(甚至值类型属性)使用 C# 11 `required` 修饰符?

当在 Entity Framework Core 模型类中使用 nullable-enable 功能时,编译器将发出大量 CS8618 警告,如下所示:

warning CS8618: Non-nullable property 'Title' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
Run Code Online (Sandbox Code Playgroud)

从 C# 11 开始,required可以使用新的修饰符(不需要其他解决方法)来消除警告:

warning CS8618: Non-nullable property 'Title' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是:

所有属性都应该获得新的required修饰符吗,甚至是值类型?

上面的例子中,应该Price也得到required修饰符吧?因为实际上,您永远不希望价格默认为 0,但您总是希望明确指定它。

应该是:

class Book
{
    public int BookId { get; set; }

    public required string Title { get; …
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework-core c#-11.0

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

Git:将未提交的更改备份到远程存储库

我想将本地未提交的更改备份到远程存储库,以便备份更改(以防本地硬盘损坏等)

(在 TFSC 中,我只是将更改“搁置”到搁置集中(它“存在”在 TF 服务器上))

我尝试过的:

  • 我创建了一个新分支“backup_2021-02-13”并切换到它
  • 我提交了更改。
  • 我将其推送到远程仓库。

此时,我的更改已保存在远程存储库上(这意味着我可以在本地硬盘损坏的情况下恢复信息)

但现在我遇到了以下问题:在“master”分支以及“backup_2021-02-13”分支中,我看不到以前挂起的更改:我在备份分支上看不到它们,因为它们有已经提交(是的,更改已经存在,但已经提交)。我在主分支上看不到它们,因为在那里,这些更改根本不存在。

但我想继续工作,就好像备份过程从未发生过一样(所有未提交的更改仍未提交)。

所以,我所做的是将备份分支的更改合并到主分支(无提交、仅 ff、squash)。这样,我将主分支中未提交的更改作为未提交的更改,就像在任何备份工作之前一样。

但我怀疑这是正常的做法。

那么,将本地未提交的更改备份到远程存储库,但同时保持当前(主)分支不变(所有未提交的更改仍然未提交)的正确(也是最简单)方法是什么?

git backup

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

在Android下异步/等待不良做法?

目前我正在将现有的C#Windows 8/iOS应用程序移植到Android(使用Xamarin).

我使用了很多异步/等待文件IO,对话框,网络等...

当应用程序在等待呼叫期间暂停/暂停时会发生什么?在Windows和iOS下有两种可能性:

  • 该应用程序稍后恢复,好像什么也没发生过
  • 如果内存不足,应用程序将被终止.

在这两种情况下,没有任何记事本泄漏,控制流程没有变化.

但是,在Android下,可以在进程保持活动状态时销毁并重新创建一个Activity.在我对async/await的理解中,这意味着:

  • 一个未关闭的对话框将永远等待,这意味着可以从调用者访问的对象("t​​his",局部变量等)将永远保留在内存中(内存泄漏)
  • 当一个等待的网络请求完成而前一个活动已被Android销毁时,"等待"(例如文件写入)之后的代码可能会发生冲突,因为存在两个正在运行的Activity实例.

我的假设是真的吗?如果是的话,可以做些什么?(不使程序像async/await发明那样复杂)

c# android xamarin.android async-await xamarin

6
推荐指数
1
解决办法
3227
查看次数

Android中的鼠标右键

从 API 14 开始,鼠标右键点击应该很容易通过 getButtonState() 检测到。

但是,当我右键单击时,它充当后退按钮。中间按钮的作用类似于主页按钮。(Android 4.4,Galaxy Note 3,通过 USB 适配器的鼠标)

我的问题:

  • (智能手机/平板电脑)设备制造商是否决定如何使用右键?
  • 还是不同的 Android 版本有不同的表现?
  • 哪些 Android 版本/设备支持鼠标右键/中键?

mouse android button

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

Skia 或 Direct2D 如何使用 GPU 渲染线条或多边形?

这是一道了解2d矢量图形GPU加速渲染原理的题。

使用 Skia 或 Direct2D,您可以绘制圆角矩形、贝塞尔曲线、多边形等,并且还可以产生模糊等效果。

Skia / Direct2D 提供基于 CPU 和 GPU 的渲染。

对于CPU渲染,我或多或少可以想象如何渲染圆角矩形。我已经见过很多不同的线条渲染算法。

但对于GPU,我没有太多线索。

  • 圆角矩形是由三角形组成的吗?
  • 圆角矩形是否完全由野生像素着色器绘制?

是否有一些基本示例可以向我展示此类事物如何工作的基本原理?

(也许,解决方案也可以在 Skia 的源代码中找到,但我担心它会如此复杂/通用,以至于像我这样的菜鸟什么都看不懂。)

graphics rendering gpu direct2d skia

6
推荐指数
1
解决办法
947
查看次数

需要QGraphicsScene信号或事件进行_after_更改

我使用QGraphicsSceneQt框架。在场景内部,我有一些QGraphicsItem可供用户选择和移动的。我想要一个信息标签,其中显示当前移动的选择的当前x和y坐标(可以包含许多项)。

我曾尝试与信号changedQGraphicsScene。但是将项的x()和y()属性设置为新值之前将其触发。因此,标签始终显示倒数第二个坐标。如果缓慢移动鼠标,则显示不是很错误。但是随着动作的迅速和突然的停止,标签是错误的。我需要场景改变触发的信号。

我还尝试覆盖的itemChange方法QGraphicsItem。但这是一样的。更改之前将其触发。(新坐标位于此方法的参数内,但我需要一次同时选择所有选定项的新坐标)

我也试图重写mouseMove的事件QGraphicsSceneQGraphicsView,但他们也有之前设定的新坐标。

我做了一个测试:我使用了单触发定时器,以便在信号发出100毫秒后更新标签。然后一切正常。但是计时器对我来说不是解决方案。

我能做什么?使所有物品不可移动并自己处理所有物品?

events qt signals qgraphicsscene

4
推荐指数
1
解决办法
4196
查看次数

避免.NET Native bug

我花了去年(兼职)将我现有的(并且成功的)Windows 8.1应用程序迁移到Windows 10 UWP.现在,在将其发布到商店之前,我在"Release"构建模式(触发.NET Native)中测试了应用程序.一切似乎都有效,直到我 - 偶然 - 注意到一个微妙但严重(因为数据妥协)的错误.我花了两天时间把它缩减为这三行代码:

var array1 = new int[1, 1];
var array2 = (int[,])array1.Clone();
array2[0, 0] = 666;

if (array1[0, 0] != array2[0, 0]) {
    ApplicationView.GetForCurrentView().Title = "OK.";
} else {
    ApplicationView.GetForCurrentView().Title = "Bug.";
}
Run Code Online (Sandbox Code Playgroud)

在调试模式下,克隆2D数组意味着修改一个数组项不会影响另一个数组.在发布模式下,修改一个阵列也会改变另一个阵列.(我使用的是最新的VS 2017.)

现在,我意识到使用.NET Native 1.6(这不是VS 2017中的默认设置),解决了这个特殊问题.

但我失去了对.NET Native的信心..NET Native仍然在我的应用程序中引入了多少错误?我的Windows 8.1应用程序无需.NET Native即可快速顺畅地运行.那么为什么我必须使用似乎充满bug的.NET Native呢?(我在过去两天了解了很多.NET Native bug.)

最近,项目"UWP Desktop Bridge"允许将传统桌面应用程序发布到App Store(他们不必使用.NET Native).那为什么我必须使用.NET Native?

有没有办法完全跳过.NET Native?如果没有,我可以将.NET Native编译器配置为不那么具有破坏性吗?

c# compiler-optimization .net-native uwp

3
推荐指数
2
解决办法
467
查看次数