فیلتر و projection
Where شرط انتخاب و Select شکل خروجی را مشخص میکند.
var names = users .Where(user => user.IsActive) .Select(user => user.Name) .OrderBy(name => name) .ToList();
مرجع سریع C# برای انواع، کلاسها، collectionها، LINQ و برنامهنویسی ناهمگام. LINQ برای فیلتر و تبدیل داده خواناست؛ deferred execution را بشناسید و query را هنگام نیاز materialize کنید. Nullable reference types را فعال کنید و قراردادهای null را در API منعکس کنید؛ نوعهای record برای دادهٔ immutable مناسباند. از این صفحه بهعنوان مرجع سریع استفاده کنید و مثالها و نکتهها را با نسخهٔ ابزار، نیاز و شرایط واقعی پروژهٔ خود تطبیق دهید.
Where شرط انتخاب و Select شکل خروجی را مشخص میکند.
var names = users .Where(user => user.IsActive) .Select(user => user.Name) .OrderBy(name => name) .ToList();GroupBy دادهها را بر اساس کلید به گروههای قابلپیمایش تبدیل میکند.
var byTeam = players .GroupBy(player => player.Team) .ToDictionary(group => group.Key, group => group.ToList());TryGetValue از lookup دوباره و مدیریت ابهام null جلوگیری میکند.
if (usersById.TryGetValue(userId, out var user)){ Console.WriteLine(user.Name);}مقدار null یا نوع نامعتبر را نزدیک محل مصرف مدیریت کنید.
string displayName = input?.Trim() is { Length: > 0 } name ? name : "Guest";record برابری مقداری و syntax ساده برای داده فراهم میکند.
public sealed record Product( string Sku, string Name, decimal Price);الگوهای switch expression شاخههای دامنه را روشن و قابلبازبینی میکنند.
static string Describe(object value) => value switch{ int number when number >= 0 => $"positive: {number}", int => "negative", string text => $"text: {text}", null => "missing", _ => "other"};CancellationToken را به عملیات downstream منتقل کنید.
static async Task<string> LoadAsync( HttpClient client, Uri uri, CancellationToken cancellationToken){ return await client.GetStringAsync(uri, cancellationToken);}کارهای مستقل را موازی اجرا کنید و خطاهای aggregate را آگاهانه مدیریت کنید.
Task<User> userTask = LoadUserAsync(userId, token);Task<IReadOnlyList<Order>> ordersTask = LoadOrdersAsync(userId, token);await Task.WhenAll(userTask, ordersTask);var summary = new Summary(userTask.Result, ordersTask.Result);using تضمین میکند منبع حتی در صورت exception آزاد شود.
await using var stream = await file.OpenReadAsync();using var reader = new StreamReader(stream);string contents = await reader.ReadToEndAsync();مقدار ثابت را با const و مقدار فقطخواندنی زمان اجرا را با readonly تعریف کنید.
نوع nullable را صریح کنید و پیش از استفاده null را بررسی کنید.
از var برای نوعی استفاده کنید که از مقدار سمت راست روشن است.
برای property از get و set و در صورت نیاز init استفاده کنید.
collection مناسب مانند List<T>، Dictionary<TKey,TValue> و HashSet<T> انتخاب کنید.
LINQ: Where برای فیلتر و Select برای نگاشت؛ اجرای deferred را در نظر بگیرید.
منابع disposable را با using مدیریت کنید.
عملیات ورودیوخروجی ناهمگام را با async و await بنویسید.
استثناهای مشخص را بگیرید و context خطا را حفظ کنید.
نسخه .NET را تثبیت و برای منطق، مرزهای null و مسیرهای خطا تست اضافه کنید.
برای دادهٔ immutable از record و برای مدل دارای هویت یا رفتار از class استفاده کنید.
توابع ناهمگام را بدون .Result یا .Wait() فراخوانی کنید تا مسدودشدن thread و deadlock بیدلیل ایجاد نشود.