مطالب
عبارت using و نحوه استفاده صحیح از آن
مثال ساده زیر را که در مورد تعریف یک کلاس Disposable و سپس استفاده از آن توسط عبارت using است را به همراه سه استثنایی که در این متدها تعریف شده است، در نظر بگیرید:
using System;

namespace TestUsing
{
    public class MyResource : IDisposable
    {
        public void DoWork()
        {
            throw new ArgumentException("A");
        }

        public void Dispose()
        {
            throw new ArgumentException("B");
        }
    }

    public static class TestClass
    {
        public static void Test()
        {
            using (MyResource r = new MyResource())
            {
                throw new ArgumentException("C");
                r.DoWork();
            }
        }
    }
}
به نظر شما قطعه کد زیر چه عبارتی را نمایش می‌دهد؟ C یا B یا A؟
try
{
     TestClass.Test();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

پاسخ: برخلاف تصور (که احتمالا C است؛ چون قبل از فراخوانی متد DoWork سبب بروز استثناء شده است)، فقط B را در خروجی مشاهده خواهیم کرد!
و این دقیقا مشکلی است که در حین کار با کتابخانه iTextSharp برای اولین بار با آن مواجه شدم. روش استفاده متداول از iTextSharp به نحو زیر است:
using (var pdfDoc = new Document(PageSize.A4))  
{  
   //todo: ...
}
در این بین هر استثنایی رخ دهد، در لاگ‌های خطای سیستم شما تنها خطاهای مرتبط با خود iTextSharp را مشاهده خواهید کرد و نه مشکل اصلی را که در کدهای ما وجود داشته است. البته این یک مشکل عمومی است و اگر «using statement and suppressed exceptions» را در گوگل جستجو کنید به نتایج مشابه زیادی خواهید رسید.
و خلاصه نتایج هم این است:
اگر به ثبت جزئیات خطاهای سیستم اهمیت می‌دهید (یکی از مهم‌ترین مزیت‌های دات نت نسبت به بسیاری از فریم ورک‌های مشابه که حداکثر خطای 0xABC12EF را نمایش می‌دهند)، از using استفاده نکنید! using در پشت صحنه به try/finally ترجمه می‌شود و بهتر است این مورد را دستی نوشت تا اینکه کامپایلر اینکار را به صورت خودکار انجام دهد.
در اینجا باز هم به یک سری کد تکراری try/finally خواهیم رسید و همانطور که در مباحث کاربردهای Action و Func در این سایت ذکر شد، می‌توان آن‌را تبدیل به کدهایی با قابلیت استفاده مجدد کرد. یک نمونه از پیاده سازی آن‌را در این سایت «C# Using Blocks can Swallow Exceptions » می‌توانید مشاهده کنید که خلاصه آن کلاس زیر است:
using System;

namespace Guard
{
    public static class SafeUsing
    {
        public static void SafeUsingBlock<TDisposable>(this TDisposable disposable, Action<TDisposable> action)
            where TDisposable : IDisposable
        {
            disposable.SafeUsingBlock(action, d => d);
        }

        internal static void SafeUsingBlock<TDisposable, T>(this TDisposable disposable, Action<T> action, Func<TDisposable, T> unwrapper)
            where TDisposable : IDisposable
        {
            try
            {
                action(unwrapper(disposable));
            }
            catch (Exception actionException)
            {
                try
                {
                    disposable.Dispose();
                }
                catch (Exception disposeException)
                {
                    throw new AggregateException(actionException, disposeException);
                }

                throw;
            }

            disposable.Dispose();
        }
    }
}
برای استفاده از کلاس فوق مثلا در حالت بکارگیری iTextSharp خواهیم داشت:
new Document(PageSize.A4).SafeUsingBlock(pdfDoc =>
{
  //todo: ...
});
علاوه بر اینکه SafeUsingBlock یک سری از اعمال تکراری را کپسوله می‌کند، از AggregateException نیز استفاده کرده است (معرفی شده در دات نت 4). به این صورت چندین استثنای رخ داده نیز در سطحی بالاتر قابل دریافت و بررسی خواهند بود و استثنایی در این بین از دست نخواهد رفت.
نظرات اشتراک‌ها
درجه‌ی محبوبیت‌ زبان‌های برنامه نویسی بر اساس میزان جستجوی مطالب آن‌ها در گوگل
به نظر من میزان جستجوی مطلب شاخص مناسبی نمیتونه باشه، من هم دات نت کار میکنم و هم جاوا (Spring Boot)، ولی برای یک کار ساده در جاوا لازمه حداقل چند تا مقاله رو مطالعه کنی تا بتونی مشکلت رو برطرف کنی. در حالی که در دات نت این میزان جستجو خیلی کمتر هست.
نظرات اشتراک‌ها
دریافت نصاب آفلاین Visual Studio 2012 نسخه Ultimate
در گوگل visual studio 2012 local help library را جستجو کنید.
ولی کسی اهمیت نمی‌ده. چون زمانیکه کل MSDN آنلاین هست نیازی به 2 گیگ فایل روی هارد نیست واقعا.
در طی این چند سال به شخصه MSDN آفلاین رو نصب نکردم و از نسخه آنلاین آن استفاده کردم.
اشتراک‌ها
پیاده سازی الگوریتم ژنتیک به زبان #C

Genetic Algorithm

الگوریتم ژنتیک (Genetic Algorithm) یا به اختصار GA تکنیک جستجویی در علم رایانه و هوش مصنوعی برای یافتن راه‌حل تقریبی برای بهینه‌سازی و مسائل جستجو است. الگوریتم ژنتیک نوع خاصی از الگوریتم‌های تکامل است که از تکنیک‌های زیست‌شناسی مانند وراثت و جهش استفاده می‌کند.

پیاده سازی الگوریتم ژنتیک به زبان #C
اشتراک‌ها
الگوریتم ها و ساختارهای داده در C#

لیست نسبتا کاملی از نحوه پیاده سازی الگوریتم‌های عمومی مانند انواع مرتب سازی (Bubble Sort, Selection Sort, ...)، جستجو، کار با درخت ها، کار با گراف و ... و همچنین انواع ساختار داده نظیر آرایه، پشته، صف و ... در C#.

الگوریتم ها و ساختارهای داده در C#
اشتراک‌ها
تبدیل دکمه ها به حالت loading با استفاده از Angular Ladda

Boostrap Ladda یک پلاگین برای نمایش دکمه هایی است که پس از کلیک باید به حالت loading تبدیل شوند. این پلاگین در فرم‌های ایجاد و یا ویرایش و یا صفحات جستجو بسیار مفید هستند. Angular-Ladda نسخه همگام سازی شده این پلاگین با AngularJs است که به سادگی میتواند به برنامه تک صفحه ای شما اضافه شود.

تبدیل دکمه ها به حالت loading با استفاده از Angular Ladda
نظرات مطالب
استفاده از پلاگین DataTables کتابخانه jQuery در برنامه‌های ASP.NET Core
- برای قسمت‌های جستجو، صفحه بندی و مرتب سازی پویای سمت سرور بهتر هست از Gridify استفاده کرد تا حالت‌های گسترده‌ای رو پوشش بده.
- در مورد کوچکی و بزرگی حرف ابتدای کلیدهای JSON تولیدی در سمت سرور، امکان تنظیم سراسری آن‌ها با مشخص سازی PropertyNamingPolicy هست.
نظرات مطالب
مستند سازی ASP.NET Core 2x API توسط OpenAPI Swagger - قسمت دوم - شروع به مستند سازی یک API
- GenerateDocumentationFile را در قسمت بعدی این سری جستجو کنید.
- همچنین این کدها در انتهای این سری به صورت زیر در آمده‌اند تا تمام اسمبلی‌های موجود را پوشش دهند که البته پروژه‌های مجزای آن‌ها هم باید هر کدام GenerateDocumentationFile خودشان را داشته باشند:
var xmlFiles = Directory.GetFiles(AppContext.BaseDirectory, "*.xml", SearchOption.TopDirectoryOnly).ToList();
xmlFiles.ForEach(xmlFile => setupAction.IncludeXmlComments(xmlFile));
نظرات مطالب
مقدمه‌ای بر تزریق وابستگی‌ها درASP.NET Core
موردی که مدنظر شما است تزریق وابستگی‌ها نام ندارد و الگوی service locator است. اگر بخواهید از آن در ASP.NET Core استفاده کنید، نظرات و نکات تکمیلی مطلب «ارتقاء به ASP.NET Core 1.0 - قسمت 6 - سرویس‌ها و تزریق وابستگی‌ها» را مطالعه کنید و خصوصا عبارات « GetService » و یا « GetRequiredService » را در آن جستجو کنید؛ مانند Request.HttpContext.RequestServices.GetService. 
نظرات مطالب
پیاده سازی JSON Web Token با ASP.NET Web API 2.x
وجود نقش‌ها و claims در این پروژه، جهت جلوگیری از انجام یک چنین کارهایی است. یک کاربر پس از لاگین می‌تواند نقش ادمین را داشته باشد یا نقش یک کاربر معمولی را و یا هر نقش دیگری که صلاح است (در این حالت نیازی به چندین صفحه‌ی لاگین وجود ندارد). در سایت (یا حتی صفحه‌ی جاری) roles و claims را جستجو کنید، اطلاعات بیشتری را در مورد کاربردهای آن‌ها می‌توانید پیدا کنید.