ট্রাই পার্স আউট ভার প্যারাম দিয়ে


93

সি # 6.0 এ থাকা একটি নতুন বৈশিষ্ট্য ট্রায়পার্স পদ্ধতিতে ভেরিয়েবল ঘোষণা করতে দেয়। আমার কিছু কোড আছে:

string s = "Hello";

if (int.TryParse(s, out var result))
{

}

তবে আমি সংকলন ত্রুটিগুলি পেয়েছি: এখানে চিত্র বর্ণনা লিখুন

আমি কী ভুল করছি? PS: প্রকল্প সেটিংসে সি # 6.0 এবং .NET ফ্রেমওয়ার্ক 4.6 সেট করা আছে।

উত্তর:


152

সি # 6.0 এ থাকা একটি নতুন বৈশিষ্ট্য ট্রাইপার্স পদ্ধতিতে ভেরিয়েবল ঘোষণা করতে দেয়।

ঘোষণাপত্রের অভিব্যক্তিগুলি সি # 6.0 থেকে কাটা হয়েছিল এবং চূড়ান্ত প্রকাশে পাঠানো হয়নি। আপনি বর্তমানে এটি করতে পারবেন না। GitHub থেকে এটির জন্য একটি প্রস্তাব নেই C # এর 7 (এছাড়াও দেখুন এই ভবিষ্যতে উল্লেখের জন্য)।

আপডেট (07/03/2017)

সি # 7 এর আনুষ্ঠানিক প্রকাশের সাথে, নিম্নলিখিত কোডগুলি সংকলন করে:

string s = "42";

if (int.TryParse(s, out var result))
{
     Console.WriteLine(result);
}

4
তথ্যের জন্য অনেক ধন্যবাদ! এটি অত্যন্ত দুঃখজনক যে এটি চূড়ান্ত প্রকাশ থেকে কাটা হয়েছে, আমার জন্য এটি একটি দুর্দান্ত বৈশিষ্ট্য।
আন্তোন 23

4
@ অ্যান্টন 23 আসুন আশা করা যাক এটি সি # 7 এর পরে চলে যাবে :)
যুবল ইটজচকভ

4
এটি আমার কাছে সবচেয়ে প্রত্যাশা বৈশিষ্ট্য ছিল।
টুয়েন ফাম

এটি কমপক্ষে সি # 7 / ভিএস2017 এ রয়েছে।
স্মিথ

4
আপনি আক্ষরিকভাবে আরও একটি বাক্য পড়তে পারছেন না? উত্তর, যা সি # 7 রেখেছে, তাও ব্যাখ্যা করে যে এটি 6.0 থেকে কেটেছিল। লোকেরা এখনও সি # 6.0 তে বিকাশ করে
ফুস রো দাহ


9

এটি সি # 7 এর একটি নতুন বৈশিষ্ট্য যা একটি খুব সুন্দর বৈশিষ্ট্য যা প্রায়শই প্যাটার্ন মিলের সাথে ব্যবহৃত হয়। এই বৈশিষ্ট্যটি এবং আরও অনেকগুলি সি # 7.0 তে সি # টিম ব্লগে হোয়াট নিউতে ঘোষণা করা হয়েছে

দলটি এখানে যে জিনিসটি অর্জন করার চেষ্টা করে তা হ'ল আরও তরল কোড। আপনার কি এমন কিছু ক্ষেত্রে মনে আছে যেখানে আউট ভেরিয়েবলের তালিকাটি ব্যবহারের জন্য অত্যন্ত দীর্ঘ হয়ে চলেছে? শুধু একটি দ্রুত উদাহরণ:

int i;
Guid g;
DateTime d;
if (int.TryParse(o, out i)) { /*use i*/ }
else if (Guid.TryParse(o, out g)) { /*use g*/ }
else if (DateTime.TryParse(o, out d)) { /*use d*/ }

সমস্যা দেখুন? এই সমস্ত আউট ভেরিয়েবল সেখানে বসে কিছু না করাই অযথা। সি # 7 ব্যবহার করে রেখার সংখ্যা অর্ধেক কেটে নেওয়া যেতে পারে:

if (int.TryParse(o, out int i)) { /*use i*/ }
else if (Guid.TryParse(o, out Guid g)) { /*use g*/ }
else if (DateTime.TryParse(o, out DateTime d)) { /*use d*/ }

কেবল রেখাগুলির সংখ্যা হ্রাস করা নয়, সুযোগগুলির ক্ষেত্রে ভেরিয়েবলগুলির কোনও অযৌক্তিক তালিকা নেই যেখানে আপনি এটি রাখতে চান না। এটি আপনাকে এমন কোনও পরিবর্তনশীল ব্যবহার করতে বাধা দেয় যা আপনি ব্যবহার করতে চান নি তবে এটি এখন আপনার কাছে দৃশ্যমান।

এই বৈশিষ্ট্যটি switchএই কোডের মতো বিবৃতিতে প্যাটার্ন মেলানোর সাথেও দরকারী (যা উপরের কোডের চেয়ে আলাদা আচরণ করে!):

switch (o)
{
    case int i: { /*use i*/ break; }
    case Guid g: { /*use g*/ break; }
    case DateTime d: { /*use d*/ break; }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.