আমার কাছে পুনঃভাগের একটি ট্রায়াল সংস্করণ রয়েছে এবং এটি সর্বদা পরামর্শ দেয় যে আমি নিয়মিত স্ট্রিংগুলিকে ভারব্যাটিম স্ট্রিংগুলিতে স্যুইচ করি। পার্থক্য কি?
আমার কাছে পুনঃভাগের একটি ট্রায়াল সংস্করণ রয়েছে এবং এটি সর্বদা পরামর্শ দেয় যে আমি নিয়মিত স্ট্রিংগুলিকে ভারব্যাটিম স্ট্রিংগুলিতে স্যুইচ করি। পার্থক্য কি?
উত্তর:
ভারব্যাটিম স্ট্রিং এমন একটি যা ফাইল নামের মতো পালাতে হবে না:
string myFileName = "C:\\myfolder\\myfile.txt";
হবে
string myFileName = @"C:\myfolder\myfile.txt";
@ প্রতীকটির অর্থ সেই স্ট্রিংটি আক্ষরিকভাবে পড়া এবং অন্যথায় নিয়ন্ত্রণের অক্ষরগুলি ব্যাখ্যা করবেন না।
এটি সি # স্পেসিফিকেশনের 2.4.4.5 বিভাগে আচ্ছাদিত :
2.4.4.5 স্ট্রিং আক্ষরিক
সি # দুটি স্ট্রিং লিটারালকে সমর্থন করে: নিয়মিত স্ট্রিং লিটারাল এবং ভার্ব্যাটিম স্ট্রিং লিটারালস।
একটি নিয়মিত স্ট্রিং আক্ষরিক শূন্য বা আরও বেশি অক্ষর সমন্বিত থাকে যা "হ্যালো" এর মতো ডাবল উদ্ধৃতিতে আবদ্ধ থাকে এবং এতে দুটি সহজ পালানোর অনুক্রম (যেমন ট্যাব অক্ষরের জন্য \ t) এবং হেক্সাডেসিমাল এবং ইউনিকোড এস্কেপ সিকোয়েন্স অন্তর্ভুক্ত থাকতে পারে।
একটি ভারব্যাটিম স্ট্রিং আক্ষরিক একটি @ অক্ষর এবং তারপরে একটি ডাবল-উদ্ধৃতি অক্ষর, শূন্য বা আরও বেশি অক্ষর এবং একটি সমাপ্ত ডাবল-উদ্ধৃতি অক্ষর থাকে। একটি সহজ উদাহরণ হ'ল @ "হ্যালো"। একটি ভারব্যাটিম স্ট্রিং আক্ষরিক ক্ষেত্রে, ডিলিমেটারগুলির মধ্যে অক্ষরগুলি বর্ণনামূলক ভারব্যাটিম হয়, কেবল ব্যতিক্রম একটি উদ্ধৃতি-পলায়ন-ক্রম হয়। বিশেষত, সরল অবলম্বন সিকোয়েন্স এবং হেক্সাডেসিমাল এবং ইউনিকোড এস্কেপ সিকোয়েন্সগুলি ভার্বাটিম স্ট্রিং লিটারে প্রসেস করা হয় না। একটি ভারব্যাটিম স্ট্রিং আক্ষরিক একাধিক লাইন বিস্তৃত হতে পারে।
অন্য কথায় @ "ভার্বাটিম স্ট্রিং আক্ষরিক" এর একমাত্র বিশেষ চরিত্রটি হ'ল ডাবল-কোট অক্ষর। আপনি যদি দ্বি-কোট সমেত একটি ভার্বাটিম স্ট্রিং লিখতে চান তবে আপনাকে অবশ্যই দুটি ডাবল-কোট লিখতে হবে। অন্যান্য সমস্ত অক্ষর আক্ষরিক অর্থে ব্যাখ্যা করা হয়।
এমনকি ভার্বাটিম স্ট্রিং আক্ষরিক ক্ষেত্রে আপনি আক্ষরিক নতুন লাইনও রাখতে পারেন। একটি নিয়মিত স্ট্রিং আক্ষরিক আপনার আক্ষরিক নতুন লাইন থাকতে পারে না। পরিবর্তে আপনি উদাহরণস্বরূপ ব্যবহার করা আবশ্যক "\n"
।
ভারব্যাটিম স্ট্রিং লিটারালগুলি সোর্স কোডে ফাইলের নাম এবং নিয়মিত এক্সপ্রেশন এম্বেড করার জন্য প্রায়শই দরকারী, কারণ এই ধরণের স্ট্রিংগুলিতে ব্যাকস্ল্যাশগুলি প্রচলিত এবং যদি নিয়মিত স্ট্রিং আক্ষরিক ব্যবহার করা হয় তবে এড়াতে হবে।
নিয়মিত স্ট্রিং লিটারাল থেকে তৈরি স্ট্রিং এবং ভার্ব্যাটিম স্ট্রিং লিটারাল থেকে তৈরি স্ট্রিংগুলির মধ্যে রানটাইমের সময় কোনও পার্থক্য নেই - এগুলি উভয় প্রকারের System.String
।
স্ট্রিং এবং ভার্ব্যাটিম স্ট্রিংয়ের মধ্যে কোনও রানটাইম পার্থক্য নেই। সংকলনের সময় এগুলি কেবল আলাদা। সংকলকটি ভার্বাটিম স্ট্রিংয়ে কম পালানোর সিকোয়েন্স গ্রহণ করে যাতে আপনি যা দেখছেন তা হ'ল একটি উদ্ধৃতি পালনের ব্যতীত অন্য কীভাবে পাবেন।
আপনি কীওয়ার্ডকে একটি নাম হিসাবে বিবেচনা করার জন্য সংকলককে বলতে ভারব্যাটিম অক্ষর, @, ব্যবহার করতে পারেন:
var @if = "if";
//okay, treated as a name
Console.WriteLine(@if);
//compiler err, if without @ is a keyword
Console.WriteLine(if);
var @a = "a";
//okay
Console.WriteLine(@a);
//also okay, @ isn't part of the name
Console.WriteLine(a);
ভারব্যাটিম স্ট্রিংগুলি ব্যবহার করে আপনার একাধিক স্ট্রিং থাকতে পারে:
Console.WriteLine(@"This
is
a
Test
for stackoverflow");
@
আপনি ছাড়া একটি ত্রুটি পেয়েছি।
ভিবি 14 এ একটি নতুন বৈশিষ্ট্য রয়েছে যা Multiline Strings
এটি সি # তে ভারব্যাটিম স্ট্রিংয়ের মতো।
প্রো টিপ: ভিবি স্ট্রিং লিটারেলগুলি এখন ঠিক সি # ভারব্যাটিম স্ট্রিংয়ের মতো।
নিয়মিত স্ট্রিংগুলি বিশেষ অক্ষরগুলিতে অনুবাদ করতে বিশেষ পালানোর ক্রম ব্যবহার করে।
/*
This string contains a newline
and a tab and an escaped backslash\
*/
Console.WriteLine("This string contains a newline\nand a tab\tand an escaped backslash\\");
ভারব্যাটিম স্ট্রিংগুলি যেমন কোনও অব্যাহতি ধারা অনুবাদ না করেই ব্যাখ্যা করা হয়:
/*
This string displays as is. No newlines\n, tabs\t or backslash-escapes\\.
*/
Console.WriteLine(@"This string displays as is. No newlines\n, tabs\t or backslash-escapes\\.");