Gunakan ekspresi koleksi untuk Create()
(IDE0303)
Properti | Nilai |
---|---|
ID Aturan | IDE0303 |
Judul | Menggunakan ekspresi koleksi untuk Membuat |
Golongan | Gaya |
Subkategori | Aturan bahasa (preferensi tingkat ekspresi) |
Bahasa pemrogram yang berlaku | C# 12+ |
Opsi | dotnet_style_prefer_collection_expression |
Gambaran Umum
Aturan ini menandai tempat Create()
metode atau metode serupa yang ditetapkan sebagai metode konstruksi koleksi (menggunakan CollectionBuilderAttribute atribut) digunakan untuk menginisialisasi koleksi dan menawarkan untuk menggantinya dengan ekspresi koleksi ([...]
).
Create()
metode umum untuk koleksi yang tidak dapat diubah, misalnya, ImmutableArray.Create(1, 2, 3)
.
Catatan
Aturan ini memerlukan versi API yang lebih baru dari API yang tidak dapat diubah (misalnya, System.Collections.Immutable), yang memilih pola ekspresi koleksi.
Opsi
Opsi menentukan perilaku yang Anda inginkan untuk diberlakukan aturan. Untuk informasi tentang mengonfigurasi opsi, lihat Format opsi.
dotnet_style_prefer_collection_expression
Properti | Nilai | Deskripsi |
---|---|---|
Nama opsi | dotnet_style_prefer_collection_expression | |
Nilai opsi | true | when_types_exactly_match |
Lebih suka menggunakan ekspresi koleksi hanya ketika jenis cocok persis, misalnya, ImmutableArray<int> i = ImmutableArray.Create(1, 2, 3); . |
when_types_loosely_match (.NET 9 dan versi yang lebih baru)* |
Lebih suka menggunakan ekspresi koleksi bahkan ketika jenis cocok secara longgar, misalnya, IEnumerable<int> i = ImmutableArray.Create(1, 2, 3); . Jenis yang ditargetkan harus cocok dengan jenis di sisi kanan atau menjadi salah satu jenis berikut: IEnumerable<T>, , ICollection<T>, IList<T>IReadOnlyCollection<T>, IReadOnlyList<T>. |
|
false | never |
Menonaktifkan aturan. | |
Nilai opsi default | true dalam .NET 8when_types_loosely_match di .NET 9 dan versi yang lebih baru |
*Perbaikan kode saat opsi ini digunakan dapat mengubah semantik kode Anda.
Contoh
// Code with violations.
ImmutableArray<int> i = ImmutableArray.Create(1, 2, 3);
IEnumerable<int> j = ImmutableArray.Create(1, 2, 3);
// Fixed code.
ImmutableArray<int> i = [1, 2, 3];
IEnumerable<int> j = [1, 2, 3];
Cuplikan kode berikut menunjukkan contoh dengan jenis kustom yang dianotasi dengan CollectionBuilderAttribute.
public class Program
{
public static void Main()
{
// IDE0303 violation.
MyCollection<int> c = MyCollection.Create(1, 2, 3);
// IDE0303 fixed code.
MyCollection<int> c = [1, 2, 3];
}
}
static partial class MyCollection
{
public static MyCollection<T> Create<T>(System.ReadOnlySpan<T> values) => default;
public static MyCollection<T> Create<T>(T t1, T t2, T t3) => default;
}
[CollectionBuilder(typeof(MyCollection), "Create")]
class MyCollection<T> : IEnumerable<T>
{
public IEnumerator<T> GetEnumerator() => default;
IEnumerator IEnumerable.GetEnumerator() => default;
}
Menyembunyikan peringatan
Jika Anda hanya ingin menekan satu pelanggaran, tambahkan arahan prapemroseduran ke file sumber Anda untuk menonaktifkan lalu mengaktifkan kembali aturan.
#pragma warning disable IDE0303
// The code that's violating the rule is on this line.
#pragma warning restore IDE0303
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.IDE0303.severity = none
Untuk menonaktifkan semua aturan gaya kode, atur tingkat keparahan none
untuk kategori Style
ke dalam file konfigurasi.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Style.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk