‫۷ سال و ۵ ماه قبل، سه‌شنبه ۲۲ فروردین ۱۳۹۶، ساعت ۱۳:۳۵
- در متد اول استفاده‌ی از واژه‌های کلیدی async و await غیرضروری است. این متد فقط باید Task را بازگشت دهد.
- در متد دوم استفاده‌ی از ConfigureAwait(false) توصیه می‌شود.

این دو افزونه‌ی ضروری را نصب کنید تا راهنمایی‌های لازم را دریافت کنید:
- AsyncFixer 
- Roslynator (^ ویا ^)
‫۷ سال و ۵ ماه قبل، سه‌شنبه ۲۲ فروردین ۱۳۹۶، ساعت ۰۱:۲۸
بهتر است از UrlHelper استفاده کنید:
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
var url = urlHelper.Content("~/stuff/");
‫۷ سال و ۵ ماه قبل، دوشنبه ۲۱ فروردین ۱۳۹۶، ساعت ۱۳:۴۷
مزیت خروجی‌های از نوع Tuple برای طراحان کتابخانه‌ها 
تبدیل خروجی‌های dynamic قبلی
// query dapper via "dynamic"
int id = ...
var row = conn.QuerySingle("select Name, LastUpdated from Records where Id=@id", new {id});
string name = row.Name; // "dynamic"
به tuple جدید
// query dapper via C# 7 tuples
int id = ...
var row = conn.QuerySingle<(string name, DateTime lastUpdated)>(
     "select Name, LastUpdated from Records where Id=@id", new {id});
// use row.name and row.lastUpdated
با مزیت نداشتن هیچ نوع سربار اضافه‌ای (کد dynamic ابتدایی جهت پردازش، DLR را وارد صحنه می‌کند؛ اما کد فوق خیر. به علاوه چون value type است، حتی سربار heap allocation را هم ندارد).
‫۷ سال و ۵ ماه قبل، یکشنبه ۲۰ فروردین ۱۳۹۶، ساعت ۰۶:۰۳
معادل مطلب «Lazy loading در تزریق وابستگی‌ها به کمک StructureMap» در ASP.NET Core
public void ConfigureServices(IServiceCollection services) 
{     
   // ...
   services.AddScoped<IEmailService, EmailService>()
                .AddScoped(x => new Lazy<IEmailService>(() => x.GetRequiredService<IEmailService>())); 
   // ...
}
ابتدا سرویس مدنظر به صورت معمولی ثبت می‌شود و سپس نمونه‌ی Lazy آن بر اساس این سرویس تعریف خواهد شد.
اکنون امکان تعریف و تزریق این سرویس به صورت Lazy در سازنده‌ی کنترلرها وجود خواهد داشت:
public class EmailController : Controller 
{   
   private readonly Lazy<IEmailService> _emailService; 
   public EmailController(Lazy<IEmailService> emailService)   
   {        
       _emailService = emailService;
   }
‫۷ سال و ۵ ماه قبل، شنبه ۱۹ فروردین ۱۳۹۶، ساعت ۱۸:۳۷
یک نکته‌ی تکمیلی
برای اینکه تنظیمات ذکر شده در مورد تقویم قمری تاثیر داده شوند، تقویم انتخابی باید به صورت ذیل باشد:
new CultureInfo("ar-SA") { DateTimeFormat = { Calendar = new HijriCalendar() } }
‫۷ سال و ۶ ماه قبل، یکشنبه ۱۳ فروردین ۱۳۹۶، ساعت ۱۸:۰۲
به روز رسانی
نکته‌ی مطلب «تخمین مدت زمان خوانده شدن یک مطلب» به این برنامه اضافه شد (یکبار کلیک بر روی recalculate در نوار ابزار آن). کار آن تصحیح مدت زمان نمایش یک ردیف زیرنویس بر اساس مدت زمان خوانده شدن آن هست تا سریع، پیش از خوانده شدن آن، ردیف بعدی نمایش داده نشود و اگر نمایش داده شد، در بالا و یا ذیل آن توسط برنامه‌ی پخش کننده، برای مدتی باقی بماند (روش کار KMPlayer).
‫۷ سال و ۶ ماه قبل، یکشنبه ۱۳ فروردین ۱۳۹۶، ساعت ۰۵:۳۱
- خواص را از شیء json دریافت و دستی نگاشت کنید:
export class Book {
    constructor(
        public id,
        public title:string,
        public pages:Array
    ){}
}

return this._http.get('getBook/1')
    .map(function(res){
        var data = res.json();
        return new Book(data.id, data.title, data.pages);
    })
- این مورد بیشتر بحث طراحی سرویس‌ها و جداسازی وظایف هست (و یک best practice). می‌توانید کلا کلاس سرویس را حذف کنید و تمام عملیات مرتبط را داخل همان کامپوننت هم مدیریت کنید. اما در +Angular2، مرسوم است کار طراحی لایه کار با HTTP، در یک کلاس سرویس مجزا انجام شود و استفاده کننده‌ها در کامپوننت‌ها، مشترک آن شوند.
‫۷ سال و ۶ ماه قبل، پنجشنبه ۱۰ فروردین ۱۳۹۶، ساعت ۱۵:۵۵
به روز رسانی
با حذف فایل project.json در VS 2017، اکنون با کلیک راست بر روی گروه نام پروژه (فایل csproj)، گزینه‌ی Edit آن ظاهر شده و مداخل ذکر شده‌ی در مطلب فوق، چنین تعاریفی را پیدا می‌کنند: 
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
    <PreserveCompilationContext>true</PreserveCompilationContext>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="1.1.0">
      <PrivateAssets>All</PrivateAssets>
    </PackageReference>
  </ItemGroup>
</Project>