নিয়মিত স্ট্রিং এবং ভারব্যাটিম স্ট্রিংয়ের মধ্যে পার্থক্য কী?


166

আমার কাছে পুনঃভাগের একটি ট্রায়াল সংস্করণ রয়েছে এবং এটি সর্বদা পরামর্শ দেয় যে আমি নিয়মিত স্ট্রিংগুলিকে ভারব্যাটিম স্ট্রিংগুলিতে স্যুইচ করি। পার্থক্য কি?


3
আমি রিশার্পারের এই পরামর্শটি কখনও দেখিনি। যেখানে আপনি এটি উদাহরণস্বরূপ একটি উদাহরণ দিতে পারেন?
জন স্যান্ডার্স

3
এইমাত্র বুঝলাম. প্রথম পরামর্শটি এটিকে কোনও উত্সে স্থানান্তরিত করা ছিল, তবে দ্বিতীয়টি ছিল এটি একটি ভারব্যাটিম স্ট্রিং তৈরি করা: ম্যাসেজবক্স.শো ("কাজ এগিয়ে যাওয়ার আগে একটি প্লাটিপাস অবশ্যই আঁকতে হবে।");
বি ক্লে শ্যানন

আমি এখনও সব সময় এটি পেতে। এটি আপনি পুনরায় বন্ধ করতে চান এমন পুনরায় ভাগ্যবান সতর্কতাগুলির মধ্যে একটি হ'ল এটি কোনও কারণ ছাড়াই স্ট্রিংগুলিকে ভারব্যাটিম বানানোর পরামর্শ দেয়।
ডিন সোয়েটেক

আপনি যদি ভিজ্যুয়াল স্টুডিও আইডিইয়ের জন্য আমার প্রস্তাবিত বৈশিষ্ট্যটি পছন্দ করেন তবে দয়া করে এখানে উন্নতি
সংস্থান.ভিজুয়ালস্টুডিও / ভিডিও / 602807/…

উত্তর:


191

ভারব্যাটিম স্ট্রিং এমন একটি যা ফাইল নামের মতো পালাতে হবে না:

string myFileName = "C:\\myfolder\\myfile.txt";

হবে

string myFileName = @"C:\myfolder\myfile.txt";

@ প্রতীকটির অর্থ সেই স্ট্রিংটি আক্ষরিকভাবে পড়া এবং অন্যথায় নিয়ন্ত্রণের অক্ষরগুলি ব্যাখ্যা করবেন না।


12
আমি অবাক হয়েছি কেন রেশার্পার এই পরিবর্তনটির পরামর্শ দেয়। যে কোনও সিএলআর গুরু জানেন যে শব্দচাটনের স্ট্রিংগুলি আরও দক্ষতার সাথে প্রক্রিয়া করা হয় সেহেতু পালানোর চরিত্রগুলি উপেক্ষা করা যেতে পারে?
ম্যাট পিটারসন

9
আমি মনে করি সম্ভবত রিশার্পার এটিকে পরামর্শ দেয় কারণ ভারব্যাটিম স্ট্রিংটি বেশি পঠনযোগ্য।
অ্যান্ডিপ

36
আমি বিশ্বাস করি এটি এক ধরণের কোডিং কনভেনশন (আমি এর আগে কখনও দেখিনি বা শুনিনি)। স্ট্রিংগুলির জন্য রিশার্পার এটি স্থানীয়করণের জন্য কোনও রিসোর্স ফাইলে স্থানান্তরিত করার জন্য বা ভার্ব্যাটিম বানানোর পরামর্শ দেয় - ভার্ব্যাটিম স্ট্রিংগুলির জন্য রিসার্চার তারপরে আর স্ট্রিংকে স্থানীয়করণের বিকল্প দেয় না। সুতরাং এটি এমন একটি স্ট্রিং তৈরির মত মনে হচ্ছে যা স্থানীয়করণের ভারব্যাটিমের প্রয়োজন হয় না।
ড্যানিয়েল ব্রুকনার

ধরা যাক আমরা স্ট্রিং আক্ষরিক স্ট্রিং ভেরিয়েবলকে নির্ধারিত করেছি, স্ট্রিং মাইফিলনেম = "সি: \\ মাইফোল্ডার \\ মাইফাইল.txt"; এখন, আমি আমারফাইনেম স্ট্রিং ভেরিয়েবলকে ভার্ব্যাটিম স্ট্রিংয়ে রূপান্তর করতে চাই। আমি এটা কিভাবে করব? এটা কি কাজ করে? স্ট্রিং verbatimStr = @myFileName;
সঞ্জীব ভূসাল

3
@ সানজিভভূসাল: আপনি আসলে কখনও তা করেন না। @ "সি: \ মাইফোল্ডার \ মাইফিল.টেক্সট" এবং "সি: \\ মাইফোল্ডার \\ মাইফিল.টিএক্সটি" সিএলআর-তে একই জিনিস। এটি মূলত সিন্টেক্সটিকাল চিনি।
alc6379

68

এটি সি # স্পেসিফিকেশনের 2.4.4.5 বিভাগে আচ্ছাদিত :

2.4.4.5 স্ট্রিং আক্ষরিক

সি # দুটি স্ট্রিং লিটারালকে সমর্থন করে: নিয়মিত স্ট্রিং লিটারাল এবং ভার্ব্যাটিম স্ট্রিং লিটারালস।

একটি নিয়মিত স্ট্রিং আক্ষরিক শূন্য বা আরও বেশি অক্ষর সমন্বিত থাকে যা "হ্যালো" এর মতো ডাবল উদ্ধৃতিতে আবদ্ধ থাকে এবং এতে দুটি সহজ পালানোর অনুক্রম (যেমন ট্যাব অক্ষরের জন্য \ t) এবং হেক্সাডেসিমাল এবং ইউনিকোড এস্কেপ সিকোয়েন্স অন্তর্ভুক্ত থাকতে পারে।

একটি ভারব্যাটিম স্ট্রিং আক্ষরিক একটি @ অক্ষর এবং তারপরে একটি ডাবল-উদ্ধৃতি অক্ষর, শূন্য বা আরও বেশি অক্ষর এবং একটি সমাপ্ত ডাবল-উদ্ধৃতি অক্ষর থাকে। একটি সহজ উদাহরণ হ'ল @ "হ্যালো"। একটি ভারব্যাটিম স্ট্রিং আক্ষরিক ক্ষেত্রে, ডিলিমেটারগুলির মধ্যে অক্ষরগুলি বর্ণনামূলক ভারব্যাটিম হয়, কেবল ব্যতিক্রম একটি উদ্ধৃতি-পলায়ন-ক্রম হয়। বিশেষত, সরল অবলম্বন সিকোয়েন্স এবং হেক্সাডেসিমাল এবং ইউনিকোড এস্কেপ সিকোয়েন্সগুলি ভার্বাটিম স্ট্রিং লিটারে প্রসেস করা হয় না। একটি ভারব্যাটিম স্ট্রিং আক্ষরিক একাধিক লাইন বিস্তৃত হতে পারে।

অন্য কথায় @ "ভার্বাটিম স্ট্রিং আক্ষরিক" এর একমাত্র বিশেষ চরিত্রটি হ'ল ডাবল-কোট অক্ষর। আপনি যদি দ্বি-কোট সমেত একটি ভার্বাটিম স্ট্রিং লিখতে চান তবে আপনাকে অবশ্যই দুটি ডাবল-কোট লিখতে হবে। অন্যান্য সমস্ত অক্ষর আক্ষরিক অর্থে ব্যাখ্যা করা হয়।

এমনকি ভার্বাটিম স্ট্রিং আক্ষরিক ক্ষেত্রে আপনি আক্ষরিক নতুন লাইনও রাখতে পারেন। একটি নিয়মিত স্ট্রিং আক্ষরিক আপনার আক্ষরিক নতুন লাইন থাকতে পারে না। পরিবর্তে আপনি উদাহরণস্বরূপ ব্যবহার করা আবশ্যক "\n"

ভারব্যাটিম স্ট্রিং লিটারালগুলি সোর্স কোডে ফাইলের নাম এবং নিয়মিত এক্সপ্রেশন এম্বেড করার জন্য প্রায়শই দরকারী, কারণ এই ধরণের স্ট্রিংগুলিতে ব্যাকস্ল্যাশগুলি প্রচলিত এবং যদি নিয়মিত স্ট্রিং আক্ষরিক ব্যবহার করা হয় তবে এড়াতে হবে।

নিয়মিত স্ট্রিং লিটারাল থেকে তৈরি স্ট্রিং এবং ভার্ব্যাটিম স্ট্রিং লিটারাল থেকে তৈরি স্ট্রিংগুলির মধ্যে রানটাইমের সময় কোনও পার্থক্য নেই - এগুলি উভয় প্রকারের System.String


27

স্ট্রিং এবং ভার্ব্যাটিম স্ট্রিংয়ের মধ্যে কোনও রানটাইম পার্থক্য নেই। সংকলনের সময় এগুলি কেবল আলাদা। সংকলকটি ভার্বাটিম স্ট্রিংয়ে কম পালানোর সিকোয়েন্স গ্রহণ করে যাতে আপনি যা দেখছেন তা হ'ল একটি উদ্ধৃতি পালনের ব্যতীত অন্য কীভাবে পাবেন।

আপনি কীওয়ার্ডকে একটি নাম হিসাবে বিবেচনা করার জন্য সংকলককে বলতে ভারব্যাটিম অক্ষর, @, ব্যবহার করতে পারেন:

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);

16

ভারব্যাটিম স্ট্রিংগুলি ব্যবহার করে আপনার একাধিক স্ট্রিং থাকতে পারে:

Console.WriteLine(@"This
    is
    a
    Test
    for stackoverflow");

@আপনি ছাড়া একটি ত্রুটি পেয়েছি।

ভিবি 14 এ একটি নতুন বৈশিষ্ট্য রয়েছে যা Multiline Stringsএটি সি # তে ভারব্যাটিম স্ট্রিংয়ের মতো।

মাল্টলাইন স্ট্রিংস

প্রো টিপ: ভিবি স্ট্রিং লিটারেলগুলি এখন ঠিক সি # ভারব্যাটিম স্ট্রিংয়ের মতো।


13

নিয়মিত স্ট্রিংগুলি বিশেষ অক্ষরগুলিতে অনুবাদ করতে বিশেষ পালানোর ক্রম ব্যবহার করে।

/*
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\\.");

0

আপনি যদি পুনঃভাগের সতর্কতাগুলি সরাতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

Localizable(false)

পরামিতি, ফাইলের অবস্থানের মতো জিনিসগুলির জন্য, যেমন। এটি একটি ভাল সমাধান হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.