نظرات مطالب
C# 7 - Local Functions
 یک نکته‌ی تکمیلی: بهبود روش کار با local functions در C# 8.0

در C# 8.0 امکان تعریف متدهای محلی static نیز اضافه شده‌است:
namespace Sample
{
    class StaticLocalFunctions
    {
        static void Main()
        {            
            ClassicCapture(); // Implicitly captured variables in the method scope            
            NonCapturing(); // Now we can explicitly prevent that
        }

        internal static int ClassicCapture()
        {
            int y;
            LocalFunction();
            return y;

            void LocalFunction() => y = 19;
        }

        internal static int NonCapturing()
        {
            int y = 5, x = 7;
            return Add(x, y);

            static int Add(int left, int right) => left + right;
        }
    }
}
در این مثال، در متد ClassicCapture، یک متد محلی LocalFunction تعریف شده‌است که استاتیک نیست. به همین جهت می‌تواند به متغیر y داخل متد در برگیرنده‌ی آن، دسترسی پیدا کند و یا حتی آن‌را تغییر دهد. بنابراین جائیکه rerun y صورت می‌گیرد، مقدار آن 19 خواهد بود.
اما اگر فکر می‌کنید که این نوع تغییرات نباید داخل متدهای محلی مجاز باشند، اکنون در C# 8.0 می‌توانید آن‌ها را استاتیک تعریف کنید تا دسترسی آن‌ها به متغیرهای متد دربرگیرنده‌ی آن‌ها، قطع شود؛ مانند متد استاتیک Add داخل متد NonCapturing که دیگر نمی‌تواند به صورت مستقیم، به متغیرهای x و y دسترسی پیدا کند.
اشتراک‌ها
شش زبان برنامه نویسی برتر در حوزه پروژه های اینترنت اشیاء

Looking for a programming language to use for IoT projects? Having difficulty deciding which to choose? Selecting a language for IoT projects is as difficult as selecting a hardware platform. Here are top 6 programming languages that are best for IoT projects. 

شش زبان برنامه نویسی برتر در حوزه پروژه های اینترنت اشیاء
نظرات مطالب
سفارشی سازی ASP.NET Core Identity - قسمت پنجم - سیاست‌های دسترسی پویا
با سلام؛ من در اجرای پروژه دچار خطای
InvalidOperationException: Unable to resolve service for type 'DNTCommon.Web.Core.IMvcActionsDiscoveryService' while attempting to activate '[ProjectName].Services.SecurityTrimmingService'.
میشوم. علت چیست؟
مطالب
SortedSet در دات نت 4

SortedSet قرار گرفته در فضای نام System.Collections.Generic دات نت 4، لیستی از اشیاء به صورت خودکار مرتب شده را ارائه می‌دهد. SortedSet نیز همانند HashSet از اعضای منحصربفردی تشکیل خواهد شد اما اینبار به شکلی مرتب شده. برای پیاده سازی آن از red-black tree data structure استفاده شده است که مهم‌ترین مزیت آن امکان افزودن و یا حذف اشیاء به آن بدون کاهش قابل توجه کارآیی برنامه است.

مثال اول:
using System;
using System.Collections.Generic;

namespace SortedSetTest
{
class Program
{
static void sample1()
{
var setRange = new SortedSet<int> { 2, 5, 6, 2, 1, 4, 8 };

foreach (var i in setRange)
{
Console.WriteLine(i);
}
}

static void Main()
{
sample1();
}
}
}
در این مثال با نحوه‌ی ایجاد این لیست جنریک خود مرتب شونده‌ی تکراری نپذیر (!) آشنا می‌شوید. اگر این مثال را اجرا نمائید، خروجی آن مرتب شده است و همچنین تنها شامل یک عدد 2 است (اعضای تکراری را حذف می‌کند).

مثال دوم:

using System;
using System.Collections.Generic;

namespace SortedSetTest
{
class Program
{
static void sample2()
{
var setRange = new SortedSet<int>();
var random = new Random();

for (int counter = 0; counter < 100; counter++)
{
var rnd = random.Next(-180, 181);
if (!setRange.Add(rnd))
{
Console.WriteLine("Couldn't add {0}", rnd);
}
}

Console.WriteLine("Result set:");
foreach (var item in setRange)
{
Console.WriteLine(item);
}
}

static void Main()
{
sample2();
}
}
}
در این مثال نحوه‌ی افزودن اعضای مختلف به این لیست ویژه، توسط متد Add آن بیان شده است. اگر آیتمی در این لیست موجود باشد، مجددا اضافه نشده و حاصل متد Add آن، False خواهد بود.

مثال سوم:
اگر از سایر انواع سفارشی تعریف شده استفاده نمائید، باید روش مقایسه‌ی آن‌ها را نیز با پیاده سازی اینترفیس استاندارد IComparable ارائه دهید؛ در غیر اینصورت با خطای At least one object must implement IComparable متوقف خواهید شد.

using System;
using System.Collections;
using System.Collections.Generic;

namespace SortedSetTest
{
class FileInfo
{
public string Name { set; get; }
public long Size { set; get; }
}

class FileInfoComparer : IComparer<FileInfo>
{
public int Compare(FileInfo x, FileInfo y)
{
var caseiComp = new CaseInsensitiveComparer();
return caseiComp.Compare(x.Name, y.Name);
}
}


class Program
{

static void sample3()
{
var setRange = new SortedSet<FileInfo>(new FileInfoComparer())
{
new FileInfo
{
Name = "file1.txt",
Size = 100
},
new FileInfo
{
Name = "file2.txt",
Size = 10
},
new FileInfo
{
Name = "file3.txt",
Size = 300
}
};

foreach (var item in setRange)
{
Console.WriteLine(item.Name);
}
}

static void Main()
{
sample3();

Console.WriteLine("Press a key...");
Console.ReadKey();
}
}
}

در این مثال اشیایی از نوع کلاس FileInfo به لیست ویژه‌ی ما اضافه شده‌اند. برای اینکه امکان مقایسه‌ی آن‌ها فراهم باشد ، کلاس FileInfoComparer با پیاده سازی اینترفیس IComparer ، روش مقایسه دو شیء از این دست را ارائه می‌دهد.

اشتراک‌ها
ردیس ۷ در راه است

گویا ۳ برابر سریع‌تر از الستیک‌سرچ است!

In Redis 7.0, Redis Labs is adding two enhancements to its JSON support. The first is with search. RediSearch 2.0, which itself only became generally available barely a month ago; it now adds JSON as a supported data type. Before this, search was run as a separate feature that sat apart from the nodes housing the data engine. RediSearch 2.0 adds new scale-out capabilities to conduct massively parallel searches across up to billions of JSON documents across multiple nodes, returning results in fractions of a second. As the search engine was optimized for the Redis database, Redis Labs claims it runs up to 3x faster than Elasticsearch. 

ردیس ۷ در راه است
اشتراک‌ها
افزونه Roslynator
A collection of 110+ analyzers and 160+ refactorings for C#, powered by Roslyn. 
افزونه Roslynator