সি # তে, আমি একটি খালি স্ট্রিং দিয়ে স্ট্রিংয়ের মানটি শুরু করতে চাই।
আমি এই কিভাবে করা উচিত? সঠিক উপায় কী এবং কেন?
string willi = string.Empty;
অথবা
string willi = String.Empty;
অথবা
string willi = "";
অথবা কি?
সি # তে, আমি একটি খালি স্ট্রিং দিয়ে স্ট্রিংয়ের মানটি শুরু করতে চাই।
আমি এই কিভাবে করা উচিত? সঠিক উপায় কী এবং কেন?
string willi = string.Empty;
অথবা
string willi = String.Empty;
অথবা
string willi = "";
অথবা কি?
উত্তর:
আপনি এবং আপনার দলের যেটি সর্বাধিক পাঠযোগ্য Use
অন্যান্য উত্তরগুলি আপনাকে প্রতিবার ব্যবহার করার সময় একটি নতুন স্ট্রিং তৈরি করার পরামর্শ দিয়েছে ""
। এটি সত্য নয় - স্ট্রিং ইন্টার্নিংয়ের কারণে, এটি প্রতিটি সমাবেশে একবার বা অ্যাপডোমাইন প্রতি একবার তৈরি করা হবে (বা সম্ভবত পুরো প্রক্রিয়াটির জন্য একবার - সেই ফ্রন্টে নিশ্চিত নয়)। এই পার্থক্যটি নগণ্য - ব্যাপকভাবে, ব্যাপকভাবে তুচ্ছ।
যা আপনি বেশি পঠনযোগ্য মনে করেন তা অবশ্য আলাদা বিষয়। এটি বিষয়গত এবং পৃথক পৃথক পৃথক হতে পারে - তাই আমি আপনাকে পরামর্শ দিচ্ছি যে আপনার দলের বেশিরভাগ লোক কী পছন্দ করে তা খুঁজে বের করুন এবং ধারাবাহিকতার জন্য সকলেই এটির সাথে যান। ব্যক্তিগতভাবে আমি ""
পড়তে আরও সহজ মনে করি ।
যে যুক্তিটি ""
এবং " "
একে অপরের পক্ষে সহজেই ভুল হয়ে যায় তা আসলে আমার সাথে ধোয়া যায় না। আপনি যদি আনুপাতিক ফন্ট ব্যবহার না করেন (এবং আমি এমন কোনও বিকাশকারীদের সাথে কাজ করি নি) তবে পার্থক্যটি বলা সহজ।
string.Empty
একটি ধ্রুবক হয় না । এর অর্থ হ'ল বেশ কয়েকটি ক্ষেত্রে যেখানে একটি সংকলন-সময় ধ্রুবক প্রয়োজন string.Empty
তা আইনীও নয়। এর মধ্যে রয়েছে case ""
ব্লক switch
বিবৃতি, ডিফল্ট মান ঐচ্ছিক প্যারামিটার , পরামিতি এবং প্রয়োগ করার ক্ষেত্রে বৈশিষ্ট্য বৈশিষ্ট্য , এবং অন্যান্য পরিস্থিতিতে অনেকটা (পাঠক বামে)। সুতরাং string.Empty
কিছু সাধারণ পরিস্থিতিতে যেটি অনুমোদিত নয়, তা প্রতিটি ""
জায়গায় কনভেনশন ব্যবহার করা ভাল better
কার্য সম্পাদন এবং কোড উত্পন্ন অবস্থান থেকে আসলেই কোনও পার্থক্য নেই। পারফরম্যান্স পরীক্ষায়, তারা পিছনে পিছনে গিয়েছিল যার মধ্যে একটির চেয়ে দ্রুত অন্যটির তুলনায় দ্রুত ছিল এবং কেবলমাত্র মিলি সেকেন্ড দ্বারা।
দৃশ্যের কোডটির পিছনের দিকে তাকিয়ে আপনি সত্যিই কোনও পার্থক্য দেখতে পাবেন না। শুধু পার্থক্য আইএল, যা হয় string.Empty
opcode ব্যবহার ldsfld
এবং ""
opcode ব্যবহার ldstr
, কিন্তু যে শুধুমাত্র কারণ string.Empty
স্ট্যাটিক হয়, এবং উভয় নির্দেশাবলী একই জিনিস করে। আপনি যদি সমাবেশটি দেখেন তবে এটি ঠিক একইরকম exactly
private void Test1()
{
string test1 = string.Empty;
string test11 = test1;
}
private void Test2()
{
string test2 = "";
string test22 = test2;
}
.method private hidebysig instance void
Test1() cil managed
{
// Code size 10 (0xa)
.maxstack 1
.locals init ([0] string test1,
[1] string test11)
IL_0000: nop
IL_0001: ldsfld string [mscorlib]System.String::Empty
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: stloc.1
IL_0009: ret
} // end of method Form1::Test1
.method private hidebysig instance void
Test2() cil managed
{
// Code size 10 (0xa)
.maxstack 1
.locals init ([0] string test2,
[1] string test22)
IL_0000: nop
IL_0001: ldstr ""
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: stloc.1
IL_0009: ret
} // end of method Form1::Test2
string test1 = string.Empty;
0000003a mov eax,dword ptr ds:[022A102Ch]
0000003f mov dword ptr [ebp-40h],eax
string test11 = test1;
00000042 mov eax,dword ptr [ebp-40h]
00000045 mov dword ptr [ebp-44h],eax
string test2 = "";
0000003a mov eax,dword ptr ds:[022A202Ch]
00000040 mov dword ptr [ebp-40h],eax
string test22 = test2;
00000043 mov eax,dword ptr [ebp-40h]
00000046 mov dword ptr [ebp-44h],eax
কোডিংয়ের মৌলিক প্রকৃতি হ'ল প্রোগ্রামার হিসাবে আমাদের কাজটি স্বীকৃতি দেওয়া যে আমরা যে প্রতিটি সিদ্ধান্ত নিই তা বাণিজ্য-বন্ধ trade […] ব্রেভিটি দিয়ে শুরু করুন। পরীক্ষার মাধ্যমে প্রয়োজনীয় অন্যান্য মাত্রা বৃদ্ধি করুন।
ফলস্বরূপ, কম কোডই ভাল কোড: পছন্দ ""
করুন string.Empty
বা String.Empty
। এই দু'টি কোনও অতিরিক্ত সুবিধা ছাড়াই দীর্ঘ ছয়গুণ বেশি - অবশ্যই কোনও অতিরিক্ত স্পষ্টতা নেই, কারণ তারা ঠিক একই তথ্য প্রকাশ করে।
i
হয় একটি দীর্ঘ পরিবর্তনশীল নাম চেয়ে ভালো। আরও সাধারণ, সংক্ষিপ্ত পরিবর্তনশীল নামগুলি একই তথ্য সরবরাহ করে , একই স্পষ্টতাই, সর্বদা পছন্দনীয়। এটা ঠিক যে প্রয়োজনীয় তথ্য আপনি প্রকাশ করতে প্রয়োজন একটি নির্দিষ্ট অক্ষর দৈর্ঘ্য, এবং আমি অস্বীকার করছি না এই (কেউ নেই)।
একটি পার্থক্য হ'ল আপনি যদি একটি switch-case
বাক্য গঠন ব্যবহার করেন তবে আপনি লিখতে পারবেন না case string.Empty:
কারণ এটি ধ্রুবক নয়। আপনি একটি পেতেCompilation error : A constant value is expected
আরও তথ্যের জন্য এই লিঙ্কটি দেখুন: স্ট্রিং-খালি-বনাম-খালি-কোটস
switch
বিবৃতি এক খুব ভাল উদাহরণ। এছাড়াও, আপনি যদি একটি alচ্ছিক প্যারামিটার তৈরি করেন তবে void MyMethod(string optional = "") { ... }
, এটি ব্যবহার করাও সম্ভব নয় string.Empty
। এবং অবশ্যই আপনি যদি কোনও const
ক্ষেত্র বা স্থানীয় ভেরিয়েবল সংজ্ঞায়িত করতে চান const string myString = "";
তবে আবার ""
একমাত্র বিকল্প। যদি কেবল string.Empty
ধ্রুবক ক্ষেত্র হত তবে কোনও তফাত হবে না। তবে এটি নয়, তাই কিছু ক্ষেত্রে আপনাকে ব্যবহার করতে হবে ""
। তাহলে কেন ""
সব সময় ব্যবহার করবেন না ?
string.Empty
আপনাকে আপনার কোড বেসে ধারাবাহিকতা অর্জন থেকে বিরত রাখে: আপনাকে একই জিনিসটি প্রকাশ করতে দুটি পৃথক সত্তা ব্যবহার করতে হবে। এবং যে কাজগুলি আপনি করতে পারবেন না তার তালিকায় যুক্ত করতে: আপনি গুণাবলীstring.Empty
সহ ব্যবহার করতে পারবেন না ।
্যদসব string
করতে String
। নির্বাচন string.Empty
উপর ""
এক নির্বাচন এবং এটির সাথে স্টিকিং একটি ব্যাপার। ব্যবহারের সুবিধা string.Empty
এটি খুব সুস্পষ্ট আপনি কি বলতে চাইছেন, এবং যদি আপনি দূর্ঘটনাক্রমে মত উপর অ মুদ্রণযোগ্য অক্ষর কপি করবেন না "\x003"
আপনার ""
।
""
বিপজ্জনক যখন কপি / পেস্ট অকার্যকর, আমি দাবী কারণ আপনার কপি কখনোই / খালি স্ট্রিং পেস্ট করুন। অন্যান্য স্ট্রিংয়ের জন্য অবশ্যই অবশ্যই এটি অবশ্যই মনে রাখা উচিত।
আমি চিম ইন করতে যাচ্ছিলাম না, তবে আমি এখানে কিছু ভুল তথ্য টস করতে দেখছি।
আমি ব্যক্তিগতভাবে পছন্দ করি string.Empty
। এটি একটি ব্যক্তিগত পছন্দ, এবং আমি কেস-কেস-কেস ভিত্তিতে আমি যে দলের সাথে কাজ করি তার ইচ্ছার দিকে ঝুঁকছি।
অন্য কিছু যেমন উল্লেখ করেছেন যে, string.Empty
এবং এর মধ্যে কোনও পার্থক্য নেই String.Empty
।
অতিরিক্তভাবে, এবং এটি একটি সামান্য জ্ঞাত সত্য, "" ব্যবহার করা পুরোপুরি গ্রহণযোগ্য। "" এর প্রতিটি উদাহরণ, অন্যান্য পরিবেশে, একটি অবজেক্ট তৈরি করবে। যাইহোক, .NET তার স্ট্রিংগুলি অভ্যন্তরীণ করে, তাই ভবিষ্যতের উদাহরণগুলি ইন্টার্ন পুল থেকে একই অপরিবর্তনীয় স্ট্রিংটি টেনে তুলবে এবং যে কোনও পারফরম্যান্সের আঘাত হ্রাস পাবে না। সূত্র: ব্র্যাড আব্রামস ।
আরও জটিল কিছু করার উপযুক্ত কারণ না থাকলে আমি ব্যক্তিগতভাবে পছন্দ করি।
String.Empty
এবং string.Empty
সমতুল্য। String
ছাত্রলীগের শ্রেণির নাম; string
এটির সি # ওরফেস (বা শর্টকাট, আপনি যদি করেন)। পাশাপাশি Int32
এবং একই int
। আরও উদাহরণের জন্য ডক্স দেখুন ।
যতদূর ""
সংশ্লিষ্ট হয়, আমি সত্যিই নিশ্চিত নই।
ব্যক্তিগতভাবে, আমি সবসময় ব্যবহার করি string.Empty
।
প্রায় প্রতিটি বিকাশকারীই "" এর অর্থ কী তা জানতে পারবেন। আমি ব্যক্তিগতভাবে স্ট্রিংয়ের মুখোমুখি হয়েছিলাম mp প্রথমবারের মতো এবং গুগল অনুসন্ধান করতে কিছু সময় ব্যয় করতে হয়েছিল যে তারা সত্যই একই জিনিস কিনা তা খুঁজে বের করতে ।
string.Empty
? আপনি কি জানেন যে আপনি ""
এটি প্রথমবার দেখেছিলেন?
এই বিষয়টি বেশ পুরানো এবং দীর্ঘ, সুতরাং এই আচরণের অন্য কোথাও উল্লেখ করা থাকলে আমাকে ক্ষমা করুন। (এবং আমাকে যে উত্তরটি জুড়েছে তাতে আমাকে নির্দেশ করুন)
আপনি যদি ব্যবহার করেন string.Empty
বা ডাবল উদ্ধৃতি ব্যবহার করেন তবে আমি সংকলকটির আচরণের মধ্যে পার্থক্য পেয়েছি । আপনি যদি স্ট্রিংয়ের সাহায্যে স্ট্রিং ভেরিয়েবলটি আরম্ভ না করে ব্যবহার করে তবেই পার্থক্যটি দেখাবে mpএফটি বা ডাবল উদ্ধৃতি দিয়ে quot
string.Empty
তত্ক্ষণে সংকলক সতর্কতা দিয়ে আরম্ভের ক্ষেত্রে
CS0219 - The variable 'x' is assigned but its value is never used
ডাবল উদ্ধৃতি দিয়ে আরম্ভের ক্ষেত্রে আপনি কখনই প্রত্যাশিত বার্তাটি পাবেন না।
এই আচরণটি এই লিঙ্কটিতে সংযুক্ত নিবন্ধে ব্যাখ্যা করা হয়েছে: https://connect.microsoft.com/VisualStudio/feedback/details/799810/c-warning-cs0219-not-reported-when-assign-non-constant-value
মূলত, যদি আমি এটি সঠিকভাবে পাই তবে তারা কোনও প্রোগ্রামারকে কোনও সতর্কতা বার্তা দিয়ে বিরক্ত না করে ডিবাগিং উদ্দেশ্যে ফাংশনের রিটার্ন মান সহ একটি ভেরিয়েবল সেট করার অনুমতি দিতে চায় এবং সুতরাং তারা কেবল ব্যয়বহুল অ্যাসাইনমেন্ট এবং স্ট্রিংয়ের ক্ষেত্রে এই সতর্কতাটিকে সীমাবদ্ধ করে দেয়। খালি কোনও ধ্রুবক নয় তবে ক্ষেত্র।
var unused = "literal";
সম্পূর্ণরূপে কম্পাইলার দ্বারা অপসারণ করা (অপসারণ) করা যেতে পারে। এর কোনও পার্শ্ব প্রতিক্রিয়া হতে পারে না। অন্যদিকে, var unused = MyClass.Member;
পুরোপুরি সরানো যায় না। এটি কারণ পড়ার Member
পার্শ্ব প্রতিক্রিয়া হতে পারে। যদি Member
কোনও get
অ্যাকসেসর সহ স্থিতিশীল সম্পত্তি হয় তবে এটি স্পষ্ট যে গ্রাহকের কাছে কল রাখতে হবে। কিন্তু এমন কি যদি Member
একটি স্ট্যাটিক ক্ষেত্র, যে স্ট্যাটিক কন্সট্রাকটর পরতে পারেন পার্শ্ব প্রতিক্রিয়া হতে পারে। নিশ্চিত যে এটি করা ভাল কোডিং শৈলী হবে। তবে পড়ার জন্য আপনার ডামি দরকার Member
।
আমি কনসোল অ্যাপ্লিকেশনটিতে নিম্নলিখিত পদ্ধতিটি ব্যবহার করে খুব সাধারণ পরীক্ষাটি সম্পাদন করেছি:
private static void CompareStringConstants()
{
string str1 = "";
string str2 = string.Empty;
string str3 = String.Empty;
Console.WriteLine(object.ReferenceEquals(str1, str2)); //prints True
Console.WriteLine(object.ReferenceEquals(str2, str3)); //prints True
}
এটি পরিষ্কারভাবে প্রস্তাব দেয় যে তিনটি ভেরিয়েবল যথা str1
, str2
এবং str3
যদিও বিভিন্ন সিনট্যাক্স ব্যবহার করে সূচনা করা হচ্ছে মেমরির ঠিক একই স্ট্রিং (শূন্য দৈর্ঘ্যের) অবজেক্টের দিকে নির্দেশ করছে। .NET 4.5 কনসোল অ্যাপ্লিকেশনটিতে আমি এই পরীক্ষাটি সম্পাদন করেছি। সুতরাং অভ্যন্তরীণভাবে তাদের কোনও পার্থক্য নেই এবং এটি সমস্ত প্রোগ্রামের সুবিধার্থে উত্সাহিত করে যা আপনি প্রোগ্রামার হিসাবে ব্যবহার করতে চান। স্ট্রিং ক্লাসের এই আচরণটি .NET এ স্ট্রিং ইন্টার্নিং হিসাবে পরিচিত । এরিক লিপার্টের একটি দুর্দান্ত ব্লগ রয়েছে যা এই ধারণাটি বর্ণনা করে।
উপরের যে কোনটি.
পন্টিফিকেশন করার জন্য অনেকগুলি আরও ভাল জিনিস রয়েছে। যেমন কোন রঙের ছাল গাছের সাথে সবচেয়ে উপযুক্ত হয়, আমি মনে করি ডালসেট শ্যাওয়ের কাঁচের ছিদ্রযুক্ত অস্পষ্ট বাদামি।
আমি স্ট্রিং.এম্পটিকে দৃ strongly়ভাবে পছন্দ করি যে এটি কী তা আপনি নিশ্চিতভাবেই জানুন এবং আপনি ঘটনাক্রমে বিষয়বস্তু অপসারণ করেননি, তবে মূলত আন্তর্জাতিকীকরণের জন্য reasons যদি আমি উদ্ধৃতিতে একটি স্ট্রিং দেখি তবে আমাকে সর্বদা ভাবতে হবে যে এটি নতুন কোড এবং এটি একটি স্ট্রিং টেবিলের মধ্যে রাখা উচিত। সুতরাং প্রতিবার কোডটি পরিবর্তিত / পর্যালোচনা হওয়ার সাথে সাথে আপনাকে "কোটগুলির মধ্যে কিছু" সন্ধান করতে হবে এবং হ্যাঁ আপনি খালি স্ট্রিংগুলি ফিল্টার করে ফেলতে পারেন তবে আমি লোকদের বলি যে আপনি স্থানীয় না হয়ে যান যদি না জানেন তবে কোটগুলিতে স্ট্রিং কখনও লাগানো ভাল অভ্যাস নয় you ।
কেউ উল্লেখ করেনি যে ভিজ্যুয়ালস্টুডিও স্ট্রিংয়ে রঙের পরে আলাদাভাবে কোডিং থাকে string যা পাঠযোগ্যতার জন্য গুরুত্বপূর্ণ important এছাড়াও, লোয়ার কেসগুলি সাধারণত যুদ্ধ এবং প্রকারের জন্য ব্যবহৃত হয়, কোনও বড় বিষয় নয় স্ট্রিং mp এমপিটি একটি ধ্রুবক এবং কোনও ভ্যার বা ধরণের নয়।
string
System.String
টাইপ প্রতিশব্দ হয় , তারা অভিন্ন।
মানগুলিও অভিন্ন: string.Empty == String.Empty == ""
আমি কোডে চরিত্র ধ্রুবক ব্যবহার করেন না "", বরং string.Empty
বা String.Empty
- সহজ দেখতে প্রোগ্রামার কি বোঝানো।
এর মধ্যে string
এবং String
আমি লোয়ার কেসটি string
বেশি পছন্দ করি কারণ আমি বহু বছর ধরে ডেলফির সাথে কাজ করতাম এবং ডেলফি স্টাইলটি ছোট হাতের অক্ষর string
।
সুতরাং, আমি যদি আপনার বস, আপনি লিখতে হবে string.Empty
আমি আনুকূল্য দেখাবেন string.Empty
উপর String.Empty
কারণ আপনি এটি একটি অন্তর্ভুক্ত করা ছাড়াই ব্যবহার করতে পারেন using System;
আপনার ফাইলে।
বাছাই ""
শেষ হিসাবে string.Empty
, এটি ব্যক্তিগত পছন্দ এবং আপনার দল দ্বারা সিদ্ধান্ত নেওয়া উচিত।
string.Empty
আমদানি না করে ধ্রুবক ব্যবহার করা সম্ভব using System
- সি # তে কীওয়ার্ডগুলি কেবল তাদের পুরোপুরি যোগ্য নামের সাথে রূপান্তরিত হয় যা নাম স্পেস অন্তর্ভুক্ত করে থাকে * .dll বা * আউটপুটে এমএসআইএল লেখার আগে। উদাহরণ ফাইল। তাই কার্যকরভাবে এমএসআইএল string.Empty
হিসাবে System.String.Empty
সংকলক লিখেছেন । এবং আপনি ইতিমধ্যে জেনে থাকতে পারেন যে আপনি যদি পুরোপুরি যোগ্য টাইপের নাম উল্লেখ করেন তবে আপনি আপনার কোড ফাইলের শীর্ষে নেমস্পেসগুলি আমদানি করতে এড়াতে পারেন।
আমি কোন পার্থক্য করি না। সর্বশেষটি টাইপ করা দ্রুততম যদিও :)
এটি কোনও বিষয় নয় - তারা ঠিক একই জিনিস। যাইহোক, মূল জিনিসটি আপনাকে অবশ্যই সামঞ্জস্যপূর্ণ হতে হবে
PS আমি সারাক্ষণ এই ধরণের "কী সঠিক জিনিস" এর সাথে লড়াই করি।
এটি সম্পূর্ণভাবে একটি কোড-শৈলীর পছন্দ, কীভাবে নেট নেট স্ট্রিংগুলি পরিচালনা করে। তবে, এখানে আমার মতামত :)
স্থির পদ্ধতি, বৈশিষ্ট্য এবং ক্ষেত্রগুলিতে অ্যাক্সেস করার সময় আমি সর্বদা ছাত্রলীগের নাম ব্যবহার করি: String.Empty
বা Int32.TryParse(...)
বা orDouble.Epsilon
নতুন দৃষ্টান্ত ঘোষণার সময় আমি সর্বদা সি # কীওয়ার্ড ব্যবহার করি: int i = 0;
বাstring foo = "bar";
আমি খুব কমই অঘোষিত স্ট্রিং লিটারেলগুলি ব্যবহার করি কারণ আমি কোডটি পুনরায় ব্যবহারযোগ্য নাম ধ্রুবকগুলিতে একত্রিত করতে স্ক্যান করতে সক্ষম হতে চাই। সংকলকটি যাহাই হউক না কেন আক্ষরিকের সাথে স্থির প্রতিস্থাপন করে তাই যাদু স্ট্রিং / সংখ্যাগুলি এড়ানোর এবং নাম দিয়ে তাদের আরও কিছুটা অর্থ দেওয়ার উপায় এটি way প্লাস মান পরিবর্তন করা সহজ।
প্রথম দুটি যে কোনও একটিই আমার কাছে গ্রহণযোগ্য হবে। আমি শেষটি এড়াতে পারব কারণ উদ্ধৃতিগুলির মধ্যে একটি স্থান রেখে বাগ প্রবর্তন করা তুলনামূলকভাবে সহজ। এই নির্দিষ্ট বাগ পর্যবেক্ষণ দ্বারা খুঁজে পাওয়া কঠিন হবে। কোনও টাইপও ধরে নিচ্ছি না, সমস্ত শব্দার্থগতভাবে সমান।
[Edit]
এছাড়াও, আপনি সর্বদা হয় string
বা String
সামঞ্জস্যের জন্য ব্যবহার করতে চাইতে পারেন , তবে এটি কেবল আমার।
আমি ব্যক্তিগতভাবে দু'বার (মাইনর) সমস্যার ফলস্বরূপ প্রত্যক্ষ করেছি। একবার টিম-ভিত্তিক প্রোগ্রামিংয়ে নতুন জুনিয়র বিকাশকারীর ভুলের কারণে হয়েছিল এবং অন্যটি ছিল একটি সাধারণ টাইপও, তবে ঘটনাটি স্ট্রিংটি ব্যবহার করছে mp এফটি উভয় ইস্যু এড়িয়ে যেতে পারত।
হ্যাঁ, এটি একটি রায় দেওয়ার আহ্বান, তবে যখন কোনও ভাষা আপনাকে কাজ করার একাধিক উপায় দেয়, তখন আমি সর্বাধিক সংকলক তদারকি এবং সবচেয়ে শক্তিশালী সংকলন-সময় প্রয়োগকারীর দিকে ঝুঁকতে থাকি। যে না ""। এটি সুনির্দিষ্ট অভিপ্রায় প্রকাশের বিষয়ে।
আপনি যদি স্ট্রিং টাইপ করেন EM এমপি বা স্ট্রং.এম্পটি, সংকলক আপনাকে জানায় যে আপনি এটি ভুল করেছেন। অবিলম্বে। এটি কেবল সংকলন করবে না। বিকাশকারী হিসাবে আপনি সুনির্দিষ্ট অভিপ্রায় উল্লেখ করছেন যে সংকলক (বা অন্য বিকাশকারী) কোনওভাবেই ভুল ব্যাখ্যা করতে পারে না, এবং আপনি যখন এটি ভুল করেন, আপনি কোনও বাগ তৈরি করতে পারবেন না।
আপনি যখন "" আপনার অর্থ "" বা তদ্বিপরীত বলতে চাইলে টাইপ করেন, সংকলক আনন্দের সাথে আপনি যা করতে বলেছিলেন তা করে। অন্য বিকাশকারী আপনার নির্দিষ্ট অভিপ্রায়টি সংগ্রহ করতে এবং নাও সক্ষম করতে পারেন। বাগ তৈরি হয়েছে।
স্ট্রিংয়ের অনেক আগে mp এমপিটি এমন একটি জিনিস ছিল যা আমি একটি স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করেছি যা EMPTY_STRING ধ্রুবককে সংজ্ঞায়িত করেছে। স্ট্রিং.আম্পটি অনুমোদিত নয় এমন ক্ষেত্রে বিবৃতিতে আমরা এখনও সেই ধ্রুবকটি ব্যবহার করি।
যখনই সম্ভব, আপনার জন্য কাজ করার জন্য সংকলকটি রেখে দিন এবং মানুষের ত্রুটির সম্ভাবনাটি যতটা ছোটই হোক না কেন, নির্মূল করুন। আইএমও, এই ট্রাম্পগুলি "পাঠযোগ্যতা" হিসাবে অন্যরা উদ্ধৃত করেছে।
নির্দিষ্টকরণ এবং সংকলন সময় প্রয়োগকারী। এটা রাতের খাবারের জন্য
সংকলক দীর্ঘমেয়াদে তাদের সমস্ত একই করা উচিত। একটি স্ট্যান্ডার্ড বাছাই করুন যাতে আপনার কোডটি পড়া সহজ হয়ে যায় এবং এটি দিয়ে আটকে যান।
আমি কিছু কোডের দিকে তাকিয়ে ছিলাম এবং এই প্রশ্নটি আমার মনে ছড়িয়ে পড়েছিল যা আমি কিছুক্ষণ আগে পড়েছি। এটি অবশ্যই পঠনযোগ্যতার প্রশ্ন।
নিম্নলিখিত সি # কোড বিবেচনা করুন ...
(customer == null) ? "" : customer.Name
বনাম
(customer == null) ? string.empty : customer.Name
আমি ব্যক্তিগতভাবে পরেরটি কম अस्पष्ट এবং পড়া সহজ।
অন্যদের দ্বারা নির্দেশিত হিসাবে প্রকৃত পার্থক্য নগণ্য।
আমি মনে করি যে দ্বিতীয়টি "যথাযথ", তবে সত্য কথা বলতে আমি এটি বিবেচনা করি না will সংকলকটি যথাযথ একই বাইকোডে সংকলন করতে যথেষ্ট স্মার্ট হওয়া উচিত। আমি নিজেই "" ব্যবহার করি।
যদিও পার্থক্যটি খুব কম, তবুও পার্থক্যটি বিদ্যমান।
1) স্ট্রিংয়ের সময় "" বস্তু তৈরি করে। তবে এই বস্তুটি একবার তৈরি হবে এবং কোডে আপনার যদি অন্য একটি থাকে তবে পরে স্ট্রিং পুল থেকে রেফারেন্স করা হবে।
২) স্ট্রিং এবং স্ট্রিং একই, তবে আমি স্ট্রিং.এম্পটি (পাশাপাশি স্ট্রিং.ফর্ম্যাট, স্ট্রিং.কপি ইত্যাদি) ব্যবহার করার পরামর্শ দিচ্ছি যেহেতু ডট নোটেশনটি ক্লাস নির্দেশ করে, অপারেটর নয়, এবং মূলধন পত্রের সাথে ক্লাস শুরু হওয়ার সাথে সঙ্গতিপূর্ণ সি # কোডিং মান।
উপর http://blogs.msdn.com/b/brada/archive/2003/04/22/49997.aspx :
ডেভিড যেমন বোঝাচ্ছেন, এর মধ্যে পার্থক্য রয়েছে
String.Empty
এবং""
বেশ ছোট, তবে একটি পার্থক্য রয়েছে।""
আসলে একটি বস্তু তৈরি করে, সম্ভবত এটি স্ট্রিং ইন্টার্ন পুলের বাইরে টানা হবে, তবে এখনও ...String.Empty
কোনও বস্তু তৈরি করার সময় ... তাই যদি আপনি সত্যিকার অর্থে স্মৃতি দক্ষতার সন্ধান করছেন তবে আমি পরামর্শ দিইString.Empty
। যাইহোক, আপনার মনে রাখা উচিত পার্থক্যটি এত তুচ্ছ যে আপনি এটি কখনও আপনার কোডটিতে দেখতে চান না ...
হিসাবেSystem.String.Empty
বাstring.Empty
বাString.Empty
... আমার যত্নের স্তরটি কম ;-)
খালি স্ট্রিং খালি সেট ঠিক নামের মতো যা প্রত্যেকে কল করতে ব্যবহার করে ""
। এছাড়াও আনুষ্ঠানিক ভাষায় একটি বর্ণমালা থেকে তৈরি স্ট্রিংগুলির শূন্য দৈর্ঘ্য রয়েছে have সেট এবং স্ট্রিং উভয়েরই এর জন্য একটি বিশেষ প্রতীক রয়েছে। খালি স্ট্রিং: ε এবং খালি সেট: ∅। আপনি যদি এই শূন্য দৈর্ঘ্যের স্ট্রিং সম্পর্কে কথা বলতে চান তবে আপনি এটিকে খালি স্ট্রিং বলবেন যাতে সকলেই আপনাকে বোঝাচ্ছে ঠিক কী জানেন। এখন আপনি string.Empty
কোডটি কেন ব্যবহার করবেন না তা খালি স্ট্রিংয়ের নাম রাখলে এর উদ্দেশ্যটি সুস্পষ্ট shows ক্ষতি হ'ল এটি কোনও ধ্রুবক নয় এবং অতএব বৈশিষ্ট্যগুলির মতো সর্বত্র পাওয়া যায় না। (এটি কিছু প্রযুক্তিগত কারণে স্থির নয়, রেফারেন্স উত্সটি দেখুন))
আমি পছন্দ করি ""
কারণ এটি সংক্ষিপ্ত এবং String.Empty
অস্তিত্বহীন এমন একটি সমস্যা সমাধান করে।