fa
Feedback

فریب کلاهبرداران را نخورید! تل‌متریو این کانال‌ها را شناسایی و برچسب‌گذاری می‌کند 👉 برای مشاهده برچسب، اشتراک تهیه کنید

| کانال توسعه‌دهندگان سی‌شارپ |

| کانال توسعه‌دهندگان سی‌شارپ |

رفتن به کانال در Telegram

⭕️ کانال توسعه‌دهندگان سی‌شارپ دولوپیکس 💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی 💎 @Developix 🚀 Developix.ir 📌 پشتیبانی و تبلیغات: @DevelopixSupport

نمایش بیشتر
1 008
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+27 روز
-330 روز

در حال بارگذاری داده‌ها

ابر برچسب‌ها
هیچ داده‌ای
مشکلی وجود دارد؟ لطفاً صفحه را تازه کنید یا با مدیر پشتیبانی ما تماس بگیرید.
اشارات ورودی و خروجی
---
---
---
---
---
---
جذب مشترکین
اکتبر '26
اکتبر '26
+74
در 0 کانال‌ها
سپتامبر '260
در 0 کانال‌ها
Get PRO
اوت '260
در 0 کانال‌ها
Get PRO
ژوئیه '260
در 0 کانال‌ها
Get PRO
ژوئن '260
در 0 کانال‌ها
Get PRO
مه '260
در 0 کانال‌ها
Get PRO
آوریل '260
در 0 کانال‌ها
Get PRO
مارس '260
در 0 کانال‌ها
Get PRO
فوریه '260
در 0 کانال‌ها
Get PRO
ژانویه '260
در 0 کانال‌ها
Get PRO
دسامبر '250
در 0 کانال‌ها
Get PRO
نوامبر '250
در 0 کانال‌ها
Get PRO
اکتبر '250
در 0 کانال‌ها
Get PRO
سپتامبر '250
در 0 کانال‌ها
Get PRO
اوت '250
در 0 کانال‌ها
Get PRO
ژوئیه '250
در 0 کانال‌ها
Get PRO
ژوئن '250
در 0 کانال‌ها
Get PRO
مه '250
در 0 کانال‌ها
Get PRO
آوریل '250
در 0 کانال‌ها
Get PRO
مارس '250
در 0 کانال‌ها
Get PRO
فوریه '250
در 0 کانال‌ها
Get PRO
ژانویه '250
در 0 کانال‌ها
Get PRO
دسامبر '240
در 0 کانال‌ها
Get PRO
نوامبر '240
در 0 کانال‌ها
Get PRO
اکتبر '240
در 0 کانال‌ها
Get PRO
سپتامبر '240
در 0 کانال‌ها
Get PRO
اوت '24
+11
در 0 کانال‌ها
Get PRO
ژوئیه '24
+50
در 0 کانال‌ها
Get PRO
ژوئن '24
+45
در 0 کانال‌ها
Get PRO
مه '24
+30
در 1 کانال‌ها
Get PRO
آوریل '24
+30
در 0 کانال‌ها
Get PRO
مارس '24
+56
در 0 کانال‌ها
Get PRO
فوریه '24
+87
در 0 کانال‌ها
Get PRO
ژانویه '24
+127
در 0 کانال‌ها
Get PRO
دسامبر '23
+108
در 0 کانال‌ها
Get PRO
نوامبر '23
+596
در 0 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
28 اکتبر0
27 اکتبر+1
26 اکتبر+3
25 اکتبر0
24 اکتبر+1
23 اکتبر+1
22 اکتبر0
21 اکتبر0
20 اکتبر0
19 اکتبر+1
18 اکتبر0
17 اکتبر+1
16 اکتبر0
15 اکتبر0
14 اکتبر0
13 اکتبر+1
12 اکتبر0
11 اکتبر0
10 اکتبر0
پست‌های کانال
این کد چی چاپ می‌کنه؟ چرا با اینکه کاربر رو از مجموعه حذف نکردیم، نتیجه می‌تونه خلاف انتظار باشه؟ کد رو چطور اصلاح می‌کنی که
این کد چی چاپ می‌کنه؟ چرا با اینکه کاربر رو از مجموعه حذف نکردیم، نتیجه می‌تونه خلاف انتظار باشه؟ کد رو چطور اصلاح می‌کنی که این مشکل پیش نیاد؟ 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp

2
🛡️ قوانین اعتبارسنجی را از مدل‌ها جدا کن وقتی شرط‌های ثبت‌نام بین سرویس و کنترلر پخش می‌شوند، تغییرشان دردسر دارد. کتابخانهٔ FluentValidation قوانین را در کلاس‌های مستقل و قابل تست نگه می‌دارد؛ بدون شلوغ‌کردن مدل با Attributeها. 🔹 قوانین آماده برای ایمیل، طول و محدودهٔ عددی 🔹 شرط‌های سفارشی و اعتبارسنجی Async 🔹 پیام خطای قابل تنظیم برای هر قانون نصب و یک نمونهٔ ساده: dotnet add package FluentValidation using FluentValidation; var validator = new UserValidator(); var result = validator.Validate(new User("bad")); Console.WriteLine(result.IsValid); // False public record User(string Email); public class UserValidator : AbstractValidator<User> { public UserValidator() { RuleFor(x => x.Email) .NotEmpty().EmailAddress(); } } 💡 برای قوانین Async از ValidateAsync استفاده کن. مستندات رسمی 🚀 از قوانین یک فرم کوچک شروع کن؛ تست‌کردنشان هم ساده‌تر می‌شود. 🔖 #CSharp #سی_شارپ #CSharp #Validation #FluentValidation 👤 Developix 💎 Channel: @DevelopixCSharp
239
3
🔥 پروژه: ملون‌لودر؛ ابزار مودینگ یونیتی برای توسعه‌دهندگان سی‌شارپ که می‌خواهند سراغ مودنویسی بازی‌های Unity بروند، MelonLoa
🔥 پروژه: ملون‌لودر؛ ابزار مودینگ یونیتی برای توسعه‌دهندگان سی‌شارپ که می‌خواهند سراغ مودنویسی بازی‌های Unity بروند، MelonLoader پروژه‌ای دیدنی است: یک Mod Loader با پشتیبانی از هر دو محیط Mono و IL2CPP. نکتهٔ مهمش همین پشتیبانی دوگانه است؛ برای بررسی مودینگ، محدود به بازی‌هایی نیستی که از Mono استفاده می‌کنند. البته سازگاری با این دو محیط به معنی تضمین کارکرد در همهٔ بازی‌ها نیست. برای شروع، مستندات و کد پروژه را ببین؛ مسیر خوبی برای آشنایی با مودنویسی در Unity است. ⭐️ 19 stars this week 🔖 #CSharp #سی_شارپ #CSharp #Unity #MelonLoader 💎 @DevelopixCSharp
256
4
‎ سؤال سی‌شارپ (سطح متوسط رو به سخت) در کد زیر، از async/await و Task.Run استفاده شده است. اجرای برنامه فقط روی یک Thread انج
‎ سؤال سی‌شارپ (سطح متوسط رو به سخت) در کد زیر، از async/await و Task.Run استفاده شده است. اجرای برنامه فقط روی یک Thread انجام می‌شود (مثلاً در یک کنسول‌اپ ساده بدون SynchronizationContext خاص). خروجی نهایی این برنامه دقیقاً چه رشته‌ای است که در کنسول چاپ می‌شود؟ (جواب را دقیق و به ترتیب کاراکترها بنویسید، شامل خطوط جدید) 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
258
5
🔥 پروژه: ‏نصب‌کننده ReShade HDR برای بازی‌ها اگر با گرافیک بازی‌ها و رندرینگ سروکار داری، پروژه ReShade HDR Installer حسابی
🔥 پروژه: ‏نصب‌کننده ReShade HDR برای بازی‌ها اگر با گرافیک بازی‌ها و رندرینگ سروکار داری، پروژه ReShade HDR Installer حسابی دیدنی است 🎮 این ابزار، نصب و پیکربندی ReShade با پروفایل‌های HDR را برای بازی‌ها خودکار می‌کند؛ از شناسایی مسیر بازی تا کپی فایل‌ها و تنظیم پریست‌ها. برای ایده گرفتن درباره طراحی ابزارهای نصب، لانچرهای بازی یا مدیریت مودها در سی‌شارپ، کدش منبع الهام خوب و عملی است. سورس این پروژه را اینجا می‌توانی ببینی: github.com/RankFTW/RHI ⭐️ 333 stars this week 🔖 #CSharp #سی_شارپ #سی‌شارپ #C# #_NET 💎 @DevelopixCSharp
343
6
تو سی‌شارپ وقتی توی حلقه رشته می‌سازی، حواست باشه StringBuilder رو فراموش نکنی. روش اول هم کد رو به‌هم می‌ریزه هم برای حجم دی+1
تو سی‌شارپ وقتی توی حلقه رشته می‌سازی، حواست باشه StringBuilder رو فراموش نکنی. روش اول هم کد رو به‌هم می‌ریزه هم برای حجم دیتای زیاد خیلی کند و پرهزینه‌ست، چون هر بار یه string جدید می‌سازه. روش دوم با StringBuilder هم تمیزتره هم از نظر Performance و مصرف حافظه خیلی بهتر جواب می‌ده؛ مخصوصاً وقتی با دیتابیس یا فایل لاگ سروکار داری و احتمال بزرگ شدن خروجی زیاده. 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
359
7
‏این کد async رو چطور درستش می‌کنی؟ اینجا متد async ظاهراً درست نوشته شده، ولی یه ایراد مهم تو استفاده از Task توش هست که می‌
‏این کد async رو چطور درستش می‌کنی؟ اینجا متد async ظاهراً درست نوشته شده، ولی یه ایراد مهم تو استفاده از Task توش هست که می‌تونه باعث Deadlock یا بلاک شدن بیخودی بشه. مشکل دقیقاً کجاست و چطور باید اصلاحش کنی؟ 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
362
8
🔥 پروژه: ‏Discord Chat Exporter برای لاگ دیسکورد برای موقع‌هایی که لازم داری لاگ چت‌های دیسکورد را نگه داری، پروژهٔ Discord
🔥 پروژه: ‏Discord Chat Exporter برای لاگ دیسکورد برای موقع‌هایی که لازم داری لاگ چت‌های دیسکورد را نگه داری، پروژهٔ Discord Chat Exporter خیلی به‌درد بخور است 🔧 یک ابزار متن‌باز نوشته‌شده با C# و .NET که چت‌ها را از سرور، DM و گروه‌ها گرفته و در قالب‌های مختلف (مثلاً HTML یا JSON) روی دیسک ذخیره می‌کند؛ با فیلتر بر اساس کانال، بازهٔ زمانی و غیره. برای آرشیو تیم، گزارش داخلی یا مهاجرت از دیسکورد عالی است. سورس و باینری‌ها این‌جاست: لینک پروژه 🚀 ⭐️ 52 stars this week 🔖 #CSharp #سی_شارپ #سی‌شارپ #ابزار #Discord 💎 @DevelopixCSharp
353
9
خروجی اجرای این کد چیست؟ در این مثال با یک سناریوی closure در LINQ و اجرای تنبل (Deferred Execution) روبه‌رو هستیم. دقت کنید
خروجی اجرای این کد چیست؟ در این مثال با یک سناریوی closure در LINQ و اجرای تنبل (Deferred Execution) روبه‌رو هستیم. دقت کنید که چه زمانی query ساخته می‌شود و چه زمانی مقدار multiplier تغییر می‌کند. پاسخ را دقیقا مطابق خروجی کنسول بنویسید (شامل خطوط جداگانه). 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
428
10
در کد زیر هدف این است که نتیجهٔ یک متد async روی Thread اصلی دریافت شود، اما پیاده‌سازی فعلی می‌تواند باعث Deadlock شود و UI
در کد زیر هدف این است که نتیجهٔ یک متد async روی Thread اصلی دریافت شود، اما پیاده‌سازی فعلی می‌تواند باعث Deadlock شود و UI را فریز کند. سوال: در این کد چه چیزی از نظر نحوهٔ صدا زدن متد async اشتباه است و این الگو را چطور باید اصلاح کرد تا هم نتیجهٔ متد async گرفته شود و هم خطر Deadlock و فریز شدن UI برطرف شود؟ فقط بخش‌های لازم را بازنویسی یا اصلاح کنید، نیازی به تغییر کامل ساختار کلاس نیست. 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
430
11
💠 نسخه جدید محیط توسعه Rider منتشر شده است 🔸 ارتقا از نسخه 2026.1.4 به 2026.2 🔖 #rider, #csharp, #release 💎 @DevelopixCSh
💠 نسخه جدید محیط توسعه Rider منتشر شده است 🔸 ارتقا از نسخه 2026.1.4 به 2026.2 🔖 #rider, #csharp, #release 💎 @DevelopixCSharp
391
12
در کد زیر، از LINQ و یک لیست مشترک استفاده شده است، اما به خاطر deferred execution و تغییر متغیر خارجی، رفتار نهایی کد غافلگی
در کد زیر، از LINQ و یک لیست مشترک استفاده شده است، اما به خاطر deferred execution و تغییر متغیر خارجی، رفتار نهایی کد غافلگیرکننده است و نتیجه‌ای که در پایان چاپ می‌شود، چیزی نیست که توسعه‌دهنده انتظار داشته باشد. سوال: چه تغییری در این کد باید انجام شود تا کوئری LINQ نتیجه‌ای پایدار و مستقل از تغییرات بعدی لیست numbers و مقدار threshold برگرداند و خروجی چاپ‌شده مطابق وضعیت لحظه تعریف کوئری باشد؟ 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
488
13
در کد زیر یک event handler ناهمگام نوشته شده که روی یک دکمه صدا زده می‌شود: public class DataLoader { public event EventHandl
در کد زیر یک event handler ناهمگام نوشته شده که روی یک دکمه صدا زده می‌شود: public class DataLoader { public event EventHandler DataLoaded; public async void Load() { await Task.Delay(1000); throw new Exception("Something went wrong"); } } public class Program { public static void Main() { var loader = new DataLoader(); loader.DataLoaded += async (s, e) => { await Task.Delay(500); Console.WriteLine("Data loaded"); }; loader.Load(); Console.WriteLine("Finished"); Console.ReadLine(); } } در این پیاده‌سازی هم از async void و هم از event سنتی استفاده شده که باعث مشکل در مدیریت خطا و زمان‌بندی اجرا می‌شود. سؤال: در این طراحی چه Anti Pattern مهمی وجود دارد و امضای متد/ایونت‌ها را چگونه باید اصلاح کنید تا هم بتوانید خطاهای ناهمگام را مدیریت کنید و هم اجرای ناهمگام به‌شکل قابل پیش‌بینی عمل کند؟ 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
547
14
👩‍💻👨‍💻 در کد زیر به رفتار String Interning در C# و مقایسه‌ی رفرنس‌ها با ReferenceEquals توجه کنید. خروجی این برنامه (سه خ
👩‍💻👨‍💻 در کد زیر به رفتار String Interning در C# و مقایسه‌ی رفرنس‌ها با ReferenceEquals توجه کنید. خروجی این برنامه (سه خط روی Console) دقیقا چه خواهد بود؟ خروجی را به‌همان شکل Console (با True/False و رشتهٔ نهایی) بنویسید. 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
535
15
‏استفادهٔ تمیز از Dependency Injection در ASP.NET Core ⚙️ یکی از ساده‌ترین ولی مهم‌ترین نکته‌ها در ASP.NET Core این است که در DI همیشه با Interface کار کنیم، نه کلاس‌های پیاده‌ساز. همین تغییر کوچک، تست‌پذیری و انعطاف سیستم را چند برابر می‌کند. 💡 وقتی مستقیم به کلاس&nbsp;Concrete وابسته می‌شویم: public class PaymentService { private readonly SqlOrderRepository _repository; public PaymentService() { _repository = new SqlOrderRepository(); } public void Pay(int orderId) { var order = _repository.Get(orderId); // ... } } اینجا: • PaymentService به یک کلاس خاص قفل شده 🔒 • تعویض دیتابیس یا Mock کردن در Unit Test سخت و پرهزینه می‌شود. حالت تمیزتر با Interface و DI Container: public interface IOrderRepository { Order Get(int id); } public class SqlOrderRepository : IOrderRepository { public Order Get(int id) { // query DB } } public class PaymentService { private readonly IOrderRepository _repository; public PaymentService(IOrderRepository repository) { _repository = repository; } public void Pay(int orderId) { var order = _repository.Get(orderId); // ... } } ثبت در ASP.NET Core DI Container: builder.Services.AddScoped<IOrderRepository, SqlOrderRepository>(); builder.Services.AddScoped<PaymentService>(); حالا PaymentService فقط قرارداد را می‌شناسد (IOrderRepository) و دیگر اهمیتی ندارد پشت صحنه Sql است، In-Memory است یا یک Web API دیگر. این یعنی loosely coupled بودن، مطابق اصل D از SOLID (Dependency Inversion). ✅ برای Unit Test هم می‌توانیم خیلی راحت یک Fake/Mock تزریق کنیم: public class FakeOrderRepository : IOrderRepository { public Order Get(int id) { return new Order { Id = id, Total = 100_000 }; } } var service = new PaymentService(new FakeOrderRepository()); این الگوی کوچک در کل لایه‌های پروژه (Application, Infrastructure, UI) کمک می‌کند وابستگی‌ها را از بالا به پایین طراحی کنیم و معماری‌هایی مثل Clean Architecture را راحت‌تر پیاده کنیم. برای مطالعهٔ بیشتر: Microsoft Docs - Dependency injection in ASP.NET Core از همین امروز در سرویس‌ها و Controllerهای جدید فقط Interfaceها را تزریق کن و کم‌کم بقیه را هم به این الگو مهاجرت بده؛ نتیجه‌اش کد تمیزتر و تغییرپذیرتر است. 🚀 🔖 #CSharp #سی_شارپ #C# #ASP_NET_Core #Dependency_Injection #SOLID #Clean_Code 👤 Developix 💎 Channel: @DevelopixCSharp
571
16
اصل SRP در Controllerهای ASP.NET Core 🎯 یکی از ساده‌ترین راه‌ها برای تمیزتر شدن کد در ASP.NET Core این است که Controller را لاغر نگه داریم و Single Responsibility Principle (SRP) را جدی بگیریم. SRP می‌گوید هر کلاس فقط یک دلیل برای تغییر داشته باشد. ولی در بسیاری از پروژه‌ها، Controller هم درخواست را هندل می‌کند، هم Validation می‌کند، هم Business Logic دارد، هم با Database حرف می‌زند و هم Log می‌گیرد 😅 نتیجه؟ کدی که تست‌نشدنی، سخت‌خوان و پر از Bugهای پنهان است. نمونهٔ ضدالگو (Controller چاق) 🚫 public class OrdersController : ControllerBase { private readonly AppDbContext _db; public OrdersController(AppDbContext db) { _db = db; } [HttpPost] public async Task<IActionResult> Create(CreateOrderDto dto) { if (string.IsNullOrWhiteSpace(dto.CustomerName)) return BadRequest("CustomerName is required"); var order = new Order { CustomerName = dto.CustomerName, TotalAmount = dto.TotalAmount, CreatedAt = DateTime.UtcNow }; if (order.TotalAmount <= 0) return BadRequest("Invalid amount"); _db.Orders.Add(order); await _db.SaveChangesAsync(); return Ok(order.Id); } } این Controller هم Validation می‌کند، هم Domain Rule، هم Data Access؛ حداقل سه مسئولیت مختلف در یک کلاس 👎 بهبود با Service + SRP ✅ Controller فقط باید: • ورودی/خروجی HTTP را مدیریت کند. • درخواست را به یک Service بدهد. • نتیجه را به Response تبدیل کند. public interface IOrderService { Task<int> CreateAsync(CreateOrderDto dto); } public class OrderService : IOrderService { private readonly AppDbContext _db; public OrderService(AppDbContext db) { _db = db; } public async Task<int> CreateAsync(CreateOrderDto dto) { if (string.IsNullOrWhiteSpace(dto.CustomerName)) throw new ArgumentException("CustomerName is required"); if (dto.TotalAmount <= 0) throw new ArgumentException("Invalid amount"); var order = new Order { CustomerName = dto.CustomerName, TotalAmount = dto.TotalAmount, CreatedAt = DateTime.UtcNow }; _db.Orders.Add(order); await _db.SaveChangesAsync(); return order.Id; } } و حالا Controller لاغرتر: [ApiController] [Route("api/[controller]")] public class OrdersController : ControllerBase { private readonly IOrderService _orderService; public OrdersController(IOrderService orderService) { _orderService = orderService; } [HttpPost] public async Task<IActionResult> Create(CreateOrderDto dto) { try { var id = await _orderService.CreateAsync(dto); return Ok(id); } catch (ArgumentException ex) { return BadRequest(ex.Message); } } } حالا: • تست Unit روی IOrderService بدون WebHost و بدون HTTP کاملاً ساده است ✅ • Controller فقط یک مسئولیت دارد: تبدیل HTTP به فراخوانی Service و برعکس. • وقتی Business Rule عوض شود، فقط Service را لمس می‌کنید، نه Controller و نه Routing. برای مطالعهٔ بیشتر: Microsoft Learn - Controllers روی همین ایده در بقیهٔ Controllerها هم کار شود، ساختار پروژه تمیزتر، قابل‌تست‌تر و آمادهٔ رشد در سطح Enterprise می‌ماند 🚀 🔖 #CSharp #سی_شارپ #C# #_NET #ASP_NET_Core #Clean_Code #SRP #Architecture 👤 Developix 💎 Channel: @DevelopixCSharp
493
17
کتابخونهٔ Polly یکی از مهم‌ترین ابزارها برای ساختن سرویس‌های رزیلینت تو دات‌نت هست 🚀 با Polly می‌تونی روی callهای I/O مثل HTTP، دیتابیس یا message broker به‌سادگی policyهایی مثل Retry، Circuit Breaker، Timeout و Fallback اعمال کنی؛ بدون این‌که پر از try/catch تکراری بشه. 👍 موارد استفادهٔ روزمره: - Retry خودکار روی خطاهای موقتی (مثل 5xx) - قطع موقت callها به سرویس مشکل‌دار (Circuit Breaker) - تعریف Timeout منطقی برای HttpClient نمونهٔ استفاده در ASP.NET Core با HttpClient: builder.Services.AddHttpClient("api") .AddPolicyHandler(Policy .HandleResult<HttpResponseMessage>(r => !r.IsSuccessStatusCode) .WaitAndRetryAsync(3, retry => TimeSpan.FromSeconds(2))); این کار هم کد رو تمیزتر می‌کنه، هم رفتار خطاها قابل پیش‌بینی و تنظیم‌پذیر می‌شه، مخصوصاً تو microservices و سیستم‌های توزیع‌شده 💡 لینک‌ها: GitHub Docs امتحانش کن روی HttpClient یا callهای حساس و کم‌کم policyهای خودت رو بساز 🌱 🔖 #CSharp #سی_شارپ #CSharp #Polly #_NET #Resilience #ASP_NET_Core 👤 Developix 💎 Channel: @DevelopixCSharp
453
18
⚡ استفاده درست از ‎ConfigureAwait(false)‎ در C# یکی از ریزه‌کاری‌های مهم در کد async/await اینه که بدون نیاز، کانتکست سنکرون‌سازی (SynchronizationContext) رو نگه نداریم. این کار تو سرویس‌ها و کتابخانه‌ها باعث بهبود کارایی و جلوگیری از Deadlock می‌شه. 💡 تو اپ‌های غیر UI (مثل ASP.NET Core) توی لایه‌های داخلی معمولاً نیازی به برگردوندن execution به همون کانتکست اولیه نیست؛ پس می‌شه از ‎ConfigureAwait(false)‎ استفاده کرد. public async Task<UserDto> GetUserAsync(int id) { var entity = await _dbContext.Users .AsNoTracking() .FirstOrDefaultAsync(u => u.Id == id) .ConfigureAwait(false); if (entity is null) return null; return new UserDto { Id = entity.Id, Name = entity.Name }; } ✅ نکته‌ها: • در UI (WPF/WinForms/Maui) تو کدی که بعد از await به UI دسترسی داره، از ‎ConfigureAwait(false)‎ استفاده نشه. • در لایه‌های زیرین (Repository، Service، Client ها) استفاده از ‎ConfigureAwait(false)‎ معمولاً انتخاب خوبیه. برای مطالعه بیشتر: Microsoft Docs - Asynchronous programming 🔖 #CSharp #سی_شارپ #CSharp #ConfigureAwait #AsyncAwait #BestPractice #Performance #_NET 👤 Developix 💎 Channel: @DevelopixCSharp
404
19
ویراک کلود | تجربه‌ی ابری بدون محدودیت ☁️🚀 🎁 ۲۰٪ شارژ هدیه روی اولین واریزی مزیت‌هایی که واقعاً فرق می‌سازن: ⚡️ پهنای باند
ویراک کلود | تجربه‌ی ابری بدون محدودیت ☁️🚀 🎁 ۲۰٪ شارژ هدیه روی اولین واریزی مزیت‌هایی که واقعاً فرق می‌سازن: ⚡️ پهنای باند 980 مگ 🌐با IP مازاد ⏱️ راه‌اندازی فوری 💳 پرداخت ساعتی 🛡 پشتیبانی ۲۴/۷ 💬 هر سوالی داشتی، تیم ما کنارتـه ✅ مناسب استارتاپ‌ها، تیم‌های فنی، تا سازمان‌های بزرگ همین الان شروع کن و با حداکثر منابع، سریع‌تر رشد کن 👇🏻 📞 تماس سریع: 02191555530 🔗 https://virakcloud.com
343
20
در نمونه‌کد بالا در نسخه‌ی اشتباه، به‌جای استفاده از LINQ و عملگرهای آماده برای حذف عناصر تکراری، به‌صورت دستی روی لیست حلقه+1
در نمونه‌کد بالا در نسخه‌ی اشتباه، به‌جای استفاده از LINQ و عملگرهای آماده برای حذف عناصر تکراری، به‌صورت دستی روی لیست حلقه زده شده و برای هر آیتم یک Any() جداگانه روی result صدا زده شده است؛ این کار در سناریوهایی که تعداد رکوردها زیاد است، باعث پیچیدگی زمانی O(n²)، افزایش فشار روی GC و کاهش کارایی می‌شود. در نسخه‌ی اصلاح‌شده با استفاده از GroupBy و انتخاب آخرین آیتم هر گروه (براساس Timestamp)، هم کد خواناتر شده و هم فقط یک بار روی مجموعه اصلی پیمایش انجام می‌شود که در سناریوهای پردازش لاگ یا Events حجیم، مصرف CPU را به‌طور محسوسی کاهش می‌دهد. کدام رویکرد را برای سناریوهای Real-World با حجم داده بالا منطقی‌تر می‌دانید و چرا در Collections بزرگ، پرهیز از حلقه‌های تو در تو (Nested) تا این حد اهمیت دارد؟ 🔖 #CSharp #سی_شارپ 👤 Developix 💎 Channel: @DevelopixCSharp
662