Nguon: Microsoft Learn · .NET 8.0

ASP0006: Không sử dụng sequence number (số thứ tự) không phải literal

Nguồn: ASP0006: Do not use non-literal sequence numbers

-Giá trị
Rule ID (Mã quy tắc)ASP0006
Category (Danh mục)Usage (Sử dụng)
Fix is breaking or non-breaking (Sửa lỗi có phá vỡ tương thích không)Non-breaking (Không phá vỡ)

Nguyên nhân

Một lời gọi method trên RenderTreeBuilder (trình tạo cây render) chứa sequence number (số thứ tự) không phải là một giá trị literal (giá trị hằng) làm tham số.

Mô tả quy tắc

Thuật toán UI diffing (so sánh giao diện) của Blazor dựa vào sequence number để xác định phần tử nào đã thay đổi. Việc tính toán sequence number một cách động hoặc dùng bộ đếm có thể dẫn đến hiệu suất diffing (so sánh) kém. Thay vào đó, hãy sử dụng sequence number là giá trị literal tương ứng với số dòng source code (mã nguồn) của phần tử. Ví dụ, đoạn code sau tạo ra lỗi:

csharp
using Microsoft.AspNetCore.Components.Rendering;
var builder = new RenderTreeBuilder();
var seqNum = 1;
builder.OpenElement(seqNum, "div");
builder.CloseElement();

Cách khắc phục vi phạm

Để khắc phục vi phạm quy tắc này, hãy đảm bảo các lời gọi method trên class RenderTreeBuilder nhận sequence number làm tham số đều sử dụng giá trị literal:

csharp
using Microsoft.AspNetCore.Components.Rendering;
var builder = new RenderTreeBuilder();
builder.OpenElement(0, "div");
builder.CloseElement();

Khi nào có thể bỏ qua cảnh báo

Không nên bỏ qua cảnh báo từ quy tắc này. Sử dụng sequence number không phải literal có thể dẫn đến giảm hiệu suất (performance degradation).