问题描述
我一直在玩 Blazor JS-Interop 方面,对此我有些困惑。这是我所拥有的:
function () { window.blazorStorage = {
get: key => key in localStorage ? JSON.parse(localStorage[key]) : null,set: (key,value) => { localStorage[key] = JSON.stringify(value); }
} };
private readonly IJSRuntime jsRuntime;
public async Task<T> GetProperty<T>(string propName)
=> await this.jsRuntime.InvokeAsync<T>("blazorStorage.get",propName);
这个问题是 - 在这种情况下调用 jsRuntime.InvokeAsync 遇到了抱怨以下内容的异常:
Error: Microsoft.JSInterop.JSException: An exception occurred executing JS interop:
Null object cannot be converted to a value type..
就我而言,我正在寻找整数类型的参数。然而,就通用函数的全部意义而言 - 它可能是任何 JSON 可序列化的东西。
我脑子里的困境是 - 一方面,我有点理解这种关于无法将 null 转换为值类型的抱怨来自哪里 - 另一方面 - 好吧,如果我们是通用的 - 我们不应该准备处理空值,因为它是来自 JS 端的有效选项 - 不能保证总会有一个值。
我在网上找不到太多关于类似问题的信息,这让我觉得我在这里可能做错了,忽略了明显的问题。
我可以通过一个非常简单的 try/catch 来解决这个问题
public async Task<T> GetProperty<T>(string propName)
{
try
{
return await this.jsRuntime.InvokeAsync<T>("blazorStorage.get",propName);
}
catch (Exception)
{
return default;
}
}
但是,jsRuntime.InvokeAsync 不能自然地处理可空值仍然有些奇怪。
我在这里做错了吗?非常感谢任何聪明的想法。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)