我正试图在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')
这是初始化的问题吗?感谢大家的帮助。
如果确定data
和data2
的大小相等,则应在for loop
中使用List
类的Add
方法。
Elements.Add(new MyClass{Id = data.ElementAt(i), Name = data2.ElementAt(i)});
您的List<MyClass> Elements
已初始化,但从未向其中添加任何MyClass
实例。当您尝试对包含0个项的集合使用索引时,它将抛出该错误。
如果你能提供你的Model
和Model2
类,那么我可以准确地展示我将如何做到这一点
@snr是对的,但就我个人而言,我不喜欢使用索引——部分原因是可能出现越界错误。这大概就是他们问你是否可以保证你的两个数据集大小相同的原因。
我更喜欢使用foreach
循环来迭代一个数据集,并将另一个数据集中的记录与Linq匹配。