在使用 C# 8 和新的不可空引用时,我意识到事件被视为字段。这意味着它们将在 90% 的情况下引发警告,因为在有人订阅之前它们不会被初始化。
考虑以下事件:
public event EventHandler IdleTimeoutReached;
Run Code Online (Sandbox Code Playgroud)
您会在构造函数声明的行上收到以下警告。
CS8618 C# 不可为空事件未初始化。考虑将事件声明为可为空的。
如果你让它可以为空,警告当然会消失。然而,这对我来说看起来很奇怪。
public event EventHandler? IdleTimeoutReached;
Run Code Online (Sandbox Code Playgroud)
另一种选择是为其分配空操作,但这似乎更糟。
public event EventHandler IdleTimeoutReached = new EventHandler((o, e) => { });
Run Code Online (Sandbox Code Playgroud)
处理这种情况并在不禁用警告的情况下消除警告的正确方法是什么?是否有任何官方指导方针?
新手问题,也许这是进行大量客户端开发的结果,但为什么我通常看不到分配了 Id 值的元素?
在我的服务器端 blazor 项目(核心 3,preview6)中,我试图用我的类的实例调用 javascript。您可以通过注入 aIJSRuntime并调用InvokeAsync它来完成此操作(请参阅此处)。
因为我需要摆脱所有 null 属性(应该处理我的对象(chartJs)的 js 库无法处理 null 值)并且因为我有一些自定义序列化(对于可以具有不同数据类型的枚举),我对其进行了修改以使其工作与ExpandoObject(这不是我的想法,但它的工作原理)。
我首先使用 json.net 序列化了我的对象,这样我就可以定义NullValueHandling = NullValueHandling.Ignore并使用所有自定义转换器。
然后我再次使用 json.net 将其解析为ExpandoObject. 我当然这样做了,因为否则不在 json 中的值在 c# 实例中将为 null,但这样它们根本不存在。
这个ExpandoObject没有空值并且有正确的枚举值,然后被用来调用javascript。这样,当它到达 javascript 引擎时就没有空值。
由于在 preview6 中 json.net 不再在内部使用,并且新的 json 序列化程序 (from System.Text.Json) 无法处理ExpandoObjects,因此当我从 preview5 更新到 preview6 时出现运行时错误,说不ExpandoObject支持。没什么大不了的,我做了一个函数将 an 转换ExpandoObject为 a Dictionary<string, object>,可以毫无问题地进行序列化。
阅读此问题以了解有关我如何做到这一点的更多信息并查看一些示例。如果你不太明白我做了什么,这可能是个好主意。它还包含我将在此处添加的 json 以及 c# …
我目前正在开发一个将 chart.js 移植到 blazor的端口。在那里,我们从 JavaScript 到 C# 进行互操作,反之亦然。Chart.js 支持自定义刻度回调或onClick,onHover和onLeave图例处理程序等回调。为了让这些回调调用 C#,我们设置了一个函数,...args该函数通过 blazor 调用 C# 方法。Blazor 然后从 C# 方法中获取结果并将其返回给 JavaScript。这样我们就可以在两者之间进行充分的沟通。
当我们需要担心返回值时(比如自定义刻度回调),我们需要确保 chart.js 获得正确的值。在(服务器端)blazor 中,您只能与 JavaScript 异步通信,因为它构建在 websockets 上。这意味着此类互操作调用的返回值始终是一个Promise对象,而 chart.js 不理解这一点。
现在我想知道我可以做什么。chart.js 有没有办法使用异步回调?
附言。我对 Javascript 没有经验。我已经问过另一个关于同步等待承诺(在同一上下文中)的问题,但这不起作用。
pps。在这个专门的 github 问题中有更多信息(但主要是在 C# 方面)。
在我的项目中,我在 x 秒内从 SPS 收到一些数据。每隔 y 分钟,我将当前数据存档在数据库中,以便能够显示统计信息。
我收到的数据被放入模型中。像这样但更复杂的事情:
public class Data
{
public DateTime ArchiveTime { get; set; }
public float TempC { get; set; }
public float CO2Percent { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个数据库存储库,它返回特定时间范围内的所有条目。看这段代码:
// Context is my DbContext for a SQLite db and Data is the DbSet<Data> on that
IQueryable<Data> GetDataBetween(DateTime from, DateTime to) => Context.Data.Where(d => (d.ArchiveTime >= from && d.ArchiveTime <= to));
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这会返回一个,IQueryable所以我想利用 linq toEntity 功能。
我相信它被称为实体的 linq,但如果不是,我指的是将表达式树转换为 sql 或其他内容的功能,而不是仅在 C# 中执行它。
由于数据库中每小时的条目数量无法确定,因此我只想每小时获取一个条目(第一个条目) …
c# datetime linq-to-entities iqueryable entity-framework-core
c# ×5
blazor ×2
.net ×1
asp.net-core ×1
chart.js ×1
datetime ×1
iqueryable ×1
javascript ×1
json ×1
json.net ×1