#Execute VB code via C می توان از طریق #C، ماکروهای Visual Basic مورد استفادهی در Office را تولید کرد. static void AddChartButton( Workbook workBook,
Worksheet xlWorkSheetNew,
Range currentRange, int macroId,
int startRow, int endRow,
int startCol, int endCol,
string butt ...
Nullable<T>.GetValueOrDefault Method با استفاده از متد GetValueOrDefault مقدار فعلی یک شیء Nullable و یا مقدار پیش فرض آن را میتوان بدست آورد. این متد از عملگر ?? سریعتر است. float? yourSingle = -1.0f;
Console.WriteLine( yourSingle.GetValueOrDefault() );
yourSingle = null;
Console.WriteLine( yourSingle.GetValueOrDefault() );
// assign different default value
Console.WriteLine( yourSingle.GetValueOrDefault ...
Parallel.For & Parallel.ForEach Parallel.For – اجرای یک حلقه for که در آن عملیات تکرار ممکن است به صورت موازی انجام شود. var nums = Enumerable.Range( 0, 1000000 ).ToArray();
long total = 0;
// Use type parameter to make subtotal a long, not an int
Parallel.For< long >( 0, nums.Length, () => 0,
( j, loop, subtotal ) =>
{
...
__arglist __reftype __makeref __refvalue کلمات کلیدی در حالیکه، ویرایشگر Visual Studio این کلمات را به صورت رنگی و جزء کلمات کلیدی نمایش میدهد، ولی به دلیل عدم وجود مستندات برای این کلمات کلیدی، برای استفاده از آنها باید مراقب باشید؛ چرا که ممکن است به اندازه کافی تست نشده باشند. شما میتوانید با استفاده از کلمه کلیدی makeref__ یک TypeReference را از یک متغیر، ایجاد کنید. با استفاده از کلمه کلیدی reftype__ میتوانید نوع ...
توابع محلی، امکان تعریف یک تابع را درون یک متد، فراهم میکنند. هدف آنها تدارک توابعی کمکی است که به سایر قسمتهای کلاس مرتبط نمیشوند. برای مثال اگر متدی نیاز به کار با یک private method دیگر را دارد و این متد خصوصی در جای دیگری استفاده نمیشود، میتوان جهت بالابردن خوانایی برنامه و سهولت یافتن متد مرتبط، این متد خصوصی را تبدیل به یک تابع محلی، درون همان متد کرد. static void Main(string[] args)
{
int Add(int a, int b)
{
...
Curry and Partial methods Curry – در ریاضیات و علوم کامپیوتر، currying روشی است برای ترجمه تابعی که آرگومانهای متعددی میگیرد و به صورت ارزیابی دنبالهایاست از توابع که هر کدام یک آرگومان دارند. برای پیاده سازی آن در #C، از extension methods استفاده میکنیم. public static class CurryMethodExtensions
{
public static Func< A, Func< B, Func< C, R > > > Curry< A, B, C, R >( this Func< A, ...
ObsoleteAttribute ObsoleteAttribute بر روی تمامی عناصر یک برنامه بجز assemblies, modules، پارامترها و مقادیر بازگشتی قابل استفاده است. علامتگذاری یک عنصر به عنوان منسوخ شده، به کاربر استفاده کننده اطلاع میدهد که این عنصر در نسخههای آینده حذف خواهد شد. با استفاده از پروپرتی Message آن پیامی را به کاربر استفاده کننده نشان خواهد داد و توصیه میشود در این پیام یک راه حل نیز ارائه شود. پروپرتی IsError در صورتی که مقدار آن به true ...
در طراحی زبان #C، واژهی کلیدی throw همیشه یک statement بودهاست و نه یک expression. برای مثال از آن نمیتوان در قطعه کدهای شرطی و عبارات lambda استفاده کرد. برای رفع این محدودیت، در C# 7 کار معرفی «throw expressions» صورت گرفتهاست.
throw expressions در C# 7
روش تعریف throw expressions همانند روش متداول تعریف آنها است و از این لحاظ تغییری صورت نگرفتهاست. تنها تغییر انجام شده، امکان استفادهی از آن در مح ...
binary literals و digit separators دو ویژگی جدید در سیشارپ 7 هستند که باعث افزایش خوانایی کدها خواهند شد. Binary Literals از همان نسخههای اولیه سیشارپ قابلیت تعریف مقادیر عددی در مبنای 10 و 16 موجود بوده و تا قبل از سیشارپ 7 روش رایج برای تعریف مقادیر هگزادسیمال استفاده از enum بوده است: [Flags]
public enum Option
{
None = 0x00,
Option1 = 0x01,
Option2 = 0x02,
Option3 = 0x04,
Option4 = 0x08,
Opt ...
از زمان ارائهی C# 5 و معرفی الگوهای async/await ، تنها نوعهای خروجی پشتیبانی شده، <Task، Task<T و void (در موارد خاص) بودند. مشکل همراه با این روش، اجبار به وهله سازی رسمی یک Task است؛ حتی اگر نوع خروجی کاملا مشخص باشد.
برای نمونه در متد ذیل، میزان حجم مصرفی در یک پوشه بازگشت داده میشود: public async Task<long> GetDirectorySize(string path, string searchPattern)
{
if (!Directory.EnumerateFileSystemEntri ...