在Blazor中创建本地表



我正试图在MudBrazor中创建一个本地表,该表包含来自两个JSONget的元素。这是示例代码。IEnumerable元素作为源提供给表。

private IEnumerable<MyClass> Elements = new List<MyClass>();

protected override async Task OnInitializedAsync()
{
await this.SetTable();
}
private async Task SetTable()
{
this._loading = true;
await InvokeAsync(StateHasChanged);
var data = await this.Api.Http.GetFromJsonAsync<Model>();
var data2 = await this.Api.Http.GetFromJsonAsync<Model2>();  (data and data2 is loaded correctly)

for (int i = 0; i < data.Count(), i++) 
{
Elements.ElementAt(i).Id = data.ElementAt(i).Id;
Elements.ElementAt(i).Name = data2.ElementAt(i).Name;
}

this._loading = false;
await InvokeAsync(StateHasChanged); 
}

类别MyClass:

namespace XY
{
public class MyClass
{
public MyClass()
{

}
public int Id { get; set; }
public string Name { get; set; }  
}
}

但它返回错误:

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')

这是初始化的问题吗?感谢大家的帮助。

如果确定datadata2的大小相等,则应在for loop中使用List类的Add方法。

Elements.Add(new MyClass{Id = data.ElementAt(i), Name = data2.ElementAt(i)});

您的List<MyClass> Elements已初始化,但从未向其中添加任何MyClass实例。当您尝试对包含0个项的集合使用索引时,它将抛出该错误。

如果你能提供你的ModelModel2类,那么我可以准确地展示我将如何做到这一点

@snr是对的,但就我个人而言,我不喜欢使用索引——部分原因是可能出现越界错误。这大概就是他们问你是否可以保证你的两个数据集大小相同的原因。

我更喜欢使用foreach循环来迭代一个数据集,并将另一个数据集中的记录与Linq匹配。

最新更新