সি # তে, আমি কি স্ট্রিংটি ব্যবহার করব? স্টিপটি ইন্টিটিয়ালাইজ করতে স্টিপিং বা স্ট্রিং mp এমপিটি বা ""?


704

সি # তে, আমি একটি খালি স্ট্রিং দিয়ে স্ট্রিংয়ের মানটি শুরু করতে চাই।

আমি এই কিভাবে করা উচিত? সঠিক উপায় কী এবং কেন?

string willi = string.Empty;

অথবা

string willi = String.Empty;

অথবা

string willi = "";

অথবা কি?


6
আরও দেখুন জাভা এই অনুরূপ আলোচনা: stackoverflow.com/questions/213985/...
Harpo

38
String.IsNullOrEmpty (স্ট্রিং মাইস্ট্রিং) ব্যবহার করা আরও ভাল, অবশ্যই?
বোকচন্দর

3
আমি [string.IsNullOrWhiteSpace (স্ট্রিংভ্যালু)] ব্যবহার করি ... নেট নেট in। আরম্ভ করার জন্য, আমি কেবল ব্যবহার করি: [var টেক্সট = "";] সহজ, পাঠযোগ্য এবং টাইপ করতে কমপক্ষে সময় লাগে :)
জালাল এল-শায়ার

60
এর চেয়ে গুরুত্বপূর্ণটি হ'ল আপনার পরিবর্তনশীলটির হাসিখুশি নাম।
আরজ

5
আমার আগ্রহী জিনিসটি কেন এখানে খালি সম্পত্তি রয়েছে। এটি দুর্দান্ত এবং সব কিছু, তবে প্রয়োজনীয় এবং সম্পূর্ণ প্রয়োজন নয়।
মাস্টারমাস্টিক

উত্তর:


806

আপনি এবং আপনার দলের যেটি সর্বাধিক পাঠযোগ্য Use

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

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

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


75
আপনি যখন "" দেখার জন্য প্রত্যাশা করছেন তখন আপনার চোখ আপনাকে প্রবঞ্চনা করতে পারে আপনি "" "" এর জন্য সহজেই ভুল করতে পারেন। এ কারণেই অন্য কেউ লিখেছেন এমন কিছু সম্পাদনা করা আরও সহজ। আপনার মস্তিষ্কের পাঠ্য সম্পর্কে প্রাক ধারণা ধারণা নেই তাই অনিয়মগুলি বেছে নেওয়া সহজ।
tvanfosson

125
@ ট্যানফসন: তাহলে কি আপনাকে (বা কোনও সহকর্মী) আসলে এটিকে বাগ হিসাবে দংশিত করেছে? আসলে এই সমস্যা তৈরি না করেই আমি এই ধরণের দাবি সম্পর্কে সন্দেহজনক। আমি এটির ভুল না হয়ে বছরের পর বছর ধরে "" ব্যবহার করে যাচ্ছি ...
জন স্কিটি

34
ব্যক্তিগতভাবে, আমি সবসময় স্ট্রিং ব্যবহার করেছি mpEmpty, আমি যখনই স্ট্রিংয়ের উপর একটি স্ট্যাটিক পদ্ধতি ব্যবহার করতে চাই তখন আমি মূলধন 'এস' ব্যবহার করি, এটি কেবল একটি ব্যক্তিগত প্রিফেরেন্স যা আমাকে ভেরিয়েবল থেকে কোনও প্রকারের পার্থক্য করতে দেয়। তবে এটি জাভা থেকে কমন্স.এলং-এ স্ট্রিংইটিলস.ইএমপিটিওয়াই ব্যবহার করে কেবল একটি বহনযোগ্য। আগ্রহের একটি বিষয় হ'ল আমি প্রায় অন্ধ এবং এটি অবশ্যই আমার জন্য পাঠযোগ্যতার সাথে সহায়তা করে।
ব্রেট রায়ান

79
আপনি আমাকে টাইমস নিউ রোমে বিকাশ শুরু করার অনুপ্রেরণা দিয়েছেন।
জাস্টিন রুসবাচ

73
কিছু অস্পষ্ট কারণে string.Emptyএকটি ধ্রুবক হয় না । এর অর্থ হ'ল বেশ কয়েকটি ক্ষেত্রে যেখানে একটি সংকলন-সময় ধ্রুবক প্রয়োজন string.Emptyতা আইনীও নয়। এর মধ্যে রয়েছে case ""ব্লক switchবিবৃতি, ডিফল্ট মান ঐচ্ছিক প্যারামিটার , পরামিতি এবং প্রয়োগ করার ক্ষেত্রে বৈশিষ্ট্য বৈশিষ্ট্য , এবং অন্যান্য পরিস্থিতিতে অনেকটা (পাঠক বামে)। সুতরাং string.Emptyকিছু সাধারণ পরিস্থিতিতে যেটি অনুমোদিত নয়, তা প্রতিটি ""জায়গায় কনভেনশন ব্যবহার করা ভাল better
জেপ্পে স্টিগ নীলসেন

375

কার্য সম্পাদন এবং কোড উত্পন্ন অবস্থান থেকে আসলেই কোনও পার্থক্য নেই। পারফরম্যান্স পরীক্ষায়, তারা পিছনে পিছনে গিয়েছিল যার মধ্যে একটির চেয়ে দ্রুত অন্যটির তুলনায় দ্রুত ছিল এবং কেবলমাত্র মিলি সেকেন্ড দ্বারা।

দৃশ্যের কোডটির পিছনের দিকে তাকিয়ে আপনি সত্যিই কোনও পার্থক্য দেখতে পাবেন না। শুধু পার্থক্য আইএল, যা হয় string.Emptyopcode ব্যবহার 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 

13
@ প্রীতেকসালুজা: আইএল দেখতে আপনি ildasm.exe ব্যবহার করতে পারেন, যা ভিজ্যুয়াল স্টুডিওতে জাহাজী করে। ছদ্মবেশ দেখতে, ডিবেগ মেনুতে 'বিচ্ছিন্নকরণ' উইন্ডোটি ব্যবহার করুন যখন আপনি ব্রেকআপপয়েন্টটি চাপেন (রিলিজ কোডেও কাজ করে)।
টমাস ব্র্যাট

1
ঘৃণা করুন যে আমি এই পণ্যটি সুপারিশ করতে চলেছি .. তবে .. প্রতিফলক আপনাকে উত্স বিযুক্ত করার সময় আপনার ভাষা চয়ন করতে দেয় এবং আইএল একটি বিকল্প! আইএলডিএএসএম কেবলমাত্র তারিখের অনুভূতি ... এমএস সরঞ্জাম সরঞ্জাম টিম ভাল সরঞ্জামগুলি পোলিশ বা প্রকাশ করতে পারে না বলে মনে হয়!
felickz

80

সেরা কোডটি কোনও কোডই নয় :

কোডিংয়ের মৌলিক প্রকৃতি হ'ল প্রোগ্রামার হিসাবে আমাদের কাজটি স্বীকৃতি দেওয়া যে আমরা যে প্রতিটি সিদ্ধান্ত নিই তা বাণিজ্য-বন্ধ trade […] ব্রেভিটি দিয়ে শুরু করুন। পরীক্ষার মাধ্যমে প্রয়োজনীয় অন্যান্য মাত্রা বৃদ্ধি করুন।

ফলস্বরূপ, কম কোডই ভাল কোড: পছন্দ ""করুন string.Emptyবা String.Empty। এই দু'টি কোনও অতিরিক্ত সুবিধা ছাড়াই দীর্ঘ ছয়গুণ বেশি - অবশ্যই কোনও অতিরিক্ত স্পষ্টতা নেই, কারণ তারা ঠিক একই তথ্য প্রকাশ করে।


1
তবে সি # তে আমরা কেবল স্ট্রিংই বলতে পারি sআইসনালওরওয়েটস্পেস: গুলি
ফেলিকজ

31
আমি সম্মত হই যে কোডটি যতটা সম্ভব ছোট হওয়া উচিত তবে সাধারণভাবে তর্ক করা যায় না যে কম অক্ষর সর্বদা ভাল কোড। উদাহরণস্বরূপ যখন পরিবর্তনশীল নামকরণের বিষয়টি আসে, তখন যুক্তিসঙ্গত পরিমাণের অক্ষর সাধারণত i এবং j ব্যবহার না করে আরও ভাল নামগুলির ফলাফল করে।
মার্কাস মায়ার

3
@Markus যে অত্যন্ত নির্ভর করে: একটি লুপ পরিবর্তনশীল একটি সূচক প্রতিনিধিত্বমূলক জন্য, i হয় একটি দীর্ঘ পরিবর্তনশীল নাম চেয়ে ভালো। আরও সাধারণ, সংক্ষিপ্ত পরিবর্তনশীল নামগুলি একই তথ্য সরবরাহ করে , একই স্পষ্টতাই, সর্বদা পছন্দনীয়। এটা ঠিক যে প্রয়োজনীয় তথ্য আপনি প্রকাশ করতে প্রয়োজন একটি নির্দিষ্ট অক্ষর দৈর্ঘ্য, এবং আমি অস্বীকার করছি না এই (কেউ নেই)।
কনরাড রুডল্ফ

2
@ কনরাড: লুপটি যদি ছোট থাকে এবং এতে অন্য কোনও সূচক না থাকে তবেই আমি একটি ভাল পরিবর্তনশীল নাম। তবে আমি সম্মত যে যদি স্টেচ হয়। একই তথ্য আরও সংক্ষিপ্তভাবে জানানো যেতে পারে, এটি স্ট্রিংয়ের মতো পছন্দনীয় mp কার্যকর / "" ক্ষেত্রে। স্ট্রিং.এম্পটি কোনও স্পষ্টতা যুক্ত করে না।
মার্কাস মায়ার

আমার কাছে: স্ট্রিং.এম্প্টি বলেছেন যে এই স্ট্রিংটি সর্বদা খালি থাকে এবং হওয়া উচিত, যেখানে "" বলছেন এই স্ট্রিংটি লেখার সময় খালি থাকতে পারে তবে আপনি এটি পরিবর্তন করতে নির্দ্বিধায় রয়েছেন।
অ্যারোসন

54

একটি পার্থক্য হ'ল আপনি যদি একটি switch-caseবাক্য গঠন ব্যবহার করেন তবে আপনি লিখতে পারবেন না case string.Empty:কারণ এটি ধ্রুবক নয়। আপনি একটি পেতেCompilation error : A constant value is expected

আরও তথ্যের জন্য এই লিঙ্কটি দেখুন: স্ট্রিং-খালি-বনাম-খালি-কোটস


22
switchবিবৃতি এক খুব ভাল উদাহরণ। এছাড়াও, আপনি যদি একটি alচ্ছিক প্যারামিটার তৈরি করেন তবে void MyMethod(string optional = "") { ... }, এটি ব্যবহার করাও সম্ভব নয় string.Empty। এবং অবশ্যই আপনি যদি কোনও constক্ষেত্র বা স্থানীয় ভেরিয়েবল সংজ্ঞায়িত করতে চান const string myString = "";তবে আবার ""একমাত্র বিকল্প। যদি কেবল string.Emptyধ্রুবক ক্ষেত্র হত তবে কোনও তফাত হবে না। তবে এটি নয়, তাই কিছু ক্ষেত্রে আপনাকে ব্যবহার করতে হবে ""। তাহলে কেন ""সব সময় ব্যবহার করবেন না ?
জেপ্পে স্টিগ নীলসন

5
এটি একটি সত্যই দৃ strong় যুক্তি কারণ ব্যবহার string.Emptyআপনাকে আপনার কোড বেসে ধারাবাহিকতা অর্জন থেকে বিরত রাখে: আপনাকে একই জিনিসটি প্রকাশ করতে দুটি পৃথক সত্তা ব্যবহার করতে হবে। এবং যে কাজগুলি আপনি করতে পারবেন না তার তালিকায় যুক্ত করতে: আপনি গুণাবলীstring.Empty সহ ব্যবহার করতে পারবেন না ।
প্রগম্যাটেক

2
খুব ভাল পয়েন্ট! লিঙ্কটি নষ্ট হয়ে গেছে। এখানে সামগ্রীর একটি অনুলিপি দেওয়া হয়েছে: web.archive.org/web/20131230161806/http://kossovsky.net/…
ygoe

42

্যদসব stringকরতে String। নির্বাচন string.Emptyউপর ""এক নির্বাচন এবং এটির সাথে স্টিকিং একটি ব্যাপার। ব্যবহারের সুবিধা string.Emptyএটি খুব সুস্পষ্ট আপনি কি বলতে চাইছেন, এবং যদি আপনি দূর্ঘটনাক্রমে মত উপর অ মুদ্রণযোগ্য অক্ষর কপি করবেন না "\x003"আপনার ""


101
আমি যুক্তি দিয়ে বলছি যে আপনি যদি ভুলক্রমে আপনার কোডটিতে প্রিন্টযোগ্য অক্ষরগুলি অনুলিপি করে থাকেন তবে এই প্রশ্নের চেয়ে আপনার আরও বড় সমস্যা হয়েছে;)
জন স্কিটি

9
ASCII \ 003 আমি বি 2 বি বার্তাগুলির সাথে ফিল্ড ডিলিমিটার হতে পেরেছি :)
জিমি

7
(আমিও \ এক্স পালাবার এড়ানো চাই প্রস্তাব দিন BTW - এটা মধ্যে "\ x9Bad কম্পাইলার" পার্থক্য স্পট খুব কঠিন এবং "\ x9Good কম্পাইলার" যা আছে আমূল ভিন্ন ফলাফল!)
জন স্কিট

ব্যক্তিগতভাবে আমি যখনই স্ট্রিংয়ে স্ট্যাটিক পদ্ধতিতে কল করি তখন স্ট্রিং ওভার স্ট্রিং পছন্দ করি। আমি তবে প্রায় অন্ধ এবং এটি ব্যক্তিগত পছন্দ যা আমি কারও উপর চাপিয়ে দিই না।
ব্রেট রায়ান

2
@ জিমি শিওর, তবে আমরা ফাঁকা স্ট্রিংয়ের কথা বলছিলাম। যুক্তি হল যে ""বিপজ্জনক যখন কপি / পেস্ট অকার্যকর, আমি দাবী কারণ আপনার কপি কখনোই / খালি স্ট্রিং পেস্ট করুন। অন্যান্য স্ট্রিংয়ের জন্য অবশ্যই অবশ্যই এটি অবশ্যই মনে রাখা উচিত।
টিমো

22

আমি চিম ইন করতে যাচ্ছিলাম না, তবে আমি এখানে কিছু ভুল তথ্য টস করতে দেখছি।

আমি ব্যক্তিগতভাবে পছন্দ করি string.Empty। এটি একটি ব্যক্তিগত পছন্দ, এবং আমি কেস-কেস-কেস ভিত্তিতে আমি যে দলের সাথে কাজ করি তার ইচ্ছার দিকে ঝুঁকছি।

অন্য কিছু যেমন উল্লেখ করেছেন যে, string.Emptyএবং এর মধ্যে কোনও পার্থক্য নেই String.Empty

অতিরিক্তভাবে, এবং এটি একটি সামান্য জ্ঞাত সত্য, "" ব্যবহার করা পুরোপুরি গ্রহণযোগ্য। "" এর প্রতিটি উদাহরণ, অন্যান্য পরিবেশে, একটি অবজেক্ট তৈরি করবে। যাইহোক, .NET তার স্ট্রিংগুলি অভ্যন্তরীণ করে, তাই ভবিষ্যতের উদাহরণগুলি ইন্টার্ন পুল থেকে একই অপরিবর্তনীয় স্ট্রিংটি টেনে তুলবে এবং যে কোনও পারফরম্যান্সের আঘাত হ্রাস পাবে না। সূত্র: ব্র্যাড আব্রামস


20
"প্রযুক্তিগতভাবে" "" এর প্রতিটি উদাহরণ "" কেন একটি বস্তু তৈরি করবে তা আমি দেখতে পাচ্ছি না। স্ট্রিংগুলি অভ্যন্তরীণভাবে স্থাপন করা কেবল এটির সুযোগ নয় - এটি সি # টিপিতে রয়েছে।
জন স্কিটি

15

আরও জটিল কিছু করার উপযুক্ত কারণ না থাকলে আমি ব্যক্তিগতভাবে পছন্দ করি।


13

String.Emptyএবং string.Emptyসমতুল্য। Stringছাত্রলীগের শ্রেণির নাম; stringএটির সি # ওরফেস (বা শর্টকাট, আপনি যদি করেন)। পাশাপাশি Int32এবং একই int। আরও উদাহরণের জন্য ডক্স দেখুন ।

যতদূর ""সংশ্লিষ্ট হয়, আমি সত্যিই নিশ্চিত নই।

ব্যক্তিগতভাবে, আমি সবসময় ব্যবহার করি string.Empty


10

প্রায় প্রতিটি বিকাশকারীই "" এর অর্থ কী তা জানতে পারবেন। আমি ব্যক্তিগতভাবে স্ট্রিংয়ের মুখোমুখি হয়েছিলাম mp প্রথমবারের মতো এবং গুগল অনুসন্ধান করতে কিছু সময় ব্যয় করতে হয়েছিল যে তারা সত্যই একই জিনিস কিনা তা খুঁজে বের করতে


3
এটি একটি সর্বজনীন পঠনযোগ্য স্ট্রিং ক্ষেত্র এবং এর মানগুলি "" ... কেন পরিবর্তন হবে?
ম্যাথু হোয়াইটস

5
আপনি @ জেসন তৈরি করেছেন সেই বিন্দুটি মিস করেছেন। আপনি কীভাবে জানবেন যে এটি প্রথমবার আপনি দেখছেন string.Empty? আপনি কি জানেন যে আপনি ""এটি প্রথমবার দেখেছিলেন?
ডেভিড আর ট্রিবল

10

এই বিষয়টি বেশ পুরানো এবং দীর্ঘ, সুতরাং এই আচরণের অন্য কোথাও উল্লেখ করা থাকলে আমাকে ক্ষমা করুন। (এবং আমাকে যে উত্তরটি জুড়েছে তাতে আমাকে নির্দেশ করুন)

আপনি যদি ব্যবহার করেন 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

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


1
আমি বিশ্বাস করি আপনিই প্রথম উল্লেখ করেছেন। আমি বেশ কয়েক মাস আগে এই প্রশ্নোত্তর মাধ্যমে পড়েছি এবং এই পার্থক্যটির কথা মনে নেই, যা আমি উল্লেখ করে থাকতাম।
পেরেক

2
মজাদার. নোট করুন যে একটি ঘোষণা var unused = "literal";সম্পূর্ণরূপে কম্পাইলার দ্বারা অপসারণ করা (অপসারণ) করা যেতে পারে। এর কোনও পার্শ্ব প্রতিক্রিয়া হতে পারে না। অন্যদিকে, var unused = MyClass.Member;পুরোপুরি সরানো যায় না। এটি কারণ পড়ার Memberপার্শ্ব প্রতিক্রিয়া হতে পারে। যদি Memberকোনও getঅ্যাকসেসর সহ স্থিতিশীল সম্পত্তি হয় তবে এটি স্পষ্ট যে গ্রাহকের কাছে কল রাখতে হবে। কিন্তু এমন কি যদি Memberএকটি স্ট্যাটিক ক্ষেত্র, যে স্ট্যাটিক কন্সট্রাকটর পরতে পারেন পার্শ্ব প্রতিক্রিয়া হতে পারে। নিশ্চিত যে এটি করা ভাল কোডিং শৈলী হবে। তবে পড়ার জন্য আপনার ডামি দরকার Member
জেপ্পে স্টিগ

9

আমি কনসোল অ্যাপ্লিকেশনটিতে নিম্নলিখিত পদ্ধতিটি ব্যবহার করে খুব সাধারণ পরীক্ষাটি সম্পাদন করেছি:

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 এ স্ট্রিং ইন্টার্নিং হিসাবে পরিচিত । এরিক লিপার্টের একটি দুর্দান্ত ব্লগ রয়েছে যা এই ধারণাটি বর্ণনা করে।


8

উপরের যে কোনটি.

পন্টিফিকেশন করার জন্য অনেকগুলি আরও ভাল জিনিস রয়েছে। যেমন কোন রঙের ছাল গাছের সাথে সবচেয়ে উপযুক্ত হয়, আমি মনে করি ডালসেট শ্যাওয়ের কাঁচের ছিদ্রযুক্ত অস্পষ্ট বাদামি।


7

আমি স্ট্রিং.এম্পটিকে দৃ strongly়ভাবে পছন্দ করি যে এটি কী তা আপনি নিশ্চিতভাবেই জানুন এবং আপনি ঘটনাক্রমে বিষয়বস্তু অপসারণ করেননি, তবে মূলত আন্তর্জাতিকীকরণের জন্য reasons যদি আমি উদ্ধৃতিতে একটি স্ট্রিং দেখি তবে আমাকে সর্বদা ভাবতে হবে যে এটি নতুন কোড এবং এটি একটি স্ট্রিং টেবিলের মধ্যে রাখা উচিত। সুতরাং প্রতিবার কোডটি পরিবর্তিত / পর্যালোচনা হওয়ার সাথে সাথে আপনাকে "কোটগুলির মধ্যে কিছু" সন্ধান করতে হবে এবং হ্যাঁ আপনি খালি স্ট্রিংগুলি ফিল্টার করে ফেলতে পারেন তবে আমি লোকদের বলি যে আপনি স্থানীয় না হয়ে যান যদি না জানেন তবে কোটগুলিতে স্ট্রিং কখনও লাগানো ভাল অভ্যাস নয় you ।


7

কেউ উল্লেখ করেনি যে ভিজ্যুয়ালস্টুডিও স্ট্রিংয়ে রঙের পরে আলাদাভাবে কোডিং থাকে string যা পাঠযোগ্যতার জন্য গুরুত্বপূর্ণ important এছাড়াও, লোয়ার কেসগুলি সাধারণত যুদ্ধ এবং প্রকারের জন্য ব্যবহৃত হয়, কোনও বড় বিষয় নয় স্ট্রিং mp এমপিটি একটি ধ্রুবক এবং কোনও ভ্যার বা ধরণের নয়।


String.Empty একটি ধ্রুবক নয়: দেখুন stackoverflow.com/questions/507923/... এটা আসলে, স্ট্রিং ক্লাসের একটা নিদর্শন এর নকশা দ্বারা। রঙিংয়ের
মাইকেল

6

stringSystem.Stringটাইপ প্রতিশব্দ হয় , তারা অভিন্ন।

মানগুলিও অভিন্ন: string.Empty == String.Empty == ""

আমি কোডে চরিত্র ধ্রুবক ব্যবহার করেন না "", বরং string.Emptyবা String.Empty- সহজ দেখতে প্রোগ্রামার কি বোঝানো।

এর মধ্যে stringএবং Stringআমি লোয়ার কেসটি stringবেশি পছন্দ করি কারণ আমি বহু বছর ধরে ডেলফির সাথে কাজ করতাম এবং ডেলফি স্টাইলটি ছোট হাতের অক্ষর string

সুতরাং, আমি যদি আপনার বস, আপনি লিখতে হবে string.Empty


6

আমি আনুকূল্য দেখাবেন string.Emptyউপর String.Emptyকারণ আপনি এটি একটি অন্তর্ভুক্ত করা ছাড়াই ব্যবহার করতে পারেন using System;আপনার ফাইলে।

বাছাই ""শেষ হিসাবে string.Empty, এটি ব্যক্তিগত পছন্দ এবং আপনার দল দ্বারা সিদ্ধান্ত নেওয়া উচিত।


2
আমি দলের একমাত্র সদস্য, আমি কীভাবে সিদ্ধান্ত নেব? একটি পাশা নিক্ষেপ?
Gqqnbig

1
যাঁরা ভাবতে পারেন যে কীভাবে নেমস্পেস string.Emptyআমদানি না করে ধ্রুবক ব্যবহার করা সম্ভব using System- সি # তে কীওয়ার্ডগুলি কেবল তাদের পুরোপুরি যোগ্য নামের সাথে রূপান্তরিত হয় যা নাম স্পেস অন্তর্ভুক্ত করে থাকে * .dll বা * আউটপুটে এমএসআইএল লেখার আগে। উদাহরণ ফাইল। তাই কার্যকরভাবে এমএসআইএল string.Emptyহিসাবে System.String.Emptyসংকলক লিখেছেন । এবং আপনি ইতিমধ্যে জেনে থাকতে পারেন যে আপনি যদি পুরোপুরি যোগ্য টাইপের নাম উল্লেখ করেন তবে আপনি আপনার কোড ফাইলের শীর্ষে নেমস্পেসগুলি আমদানি করতে এড়াতে পারেন।
আরবিটি

5

আমি কোন পার্থক্য করি না। সর্বশেষটি টাইপ করা দ্রুততম যদিও :)


4

এটি কোনও বিষয় নয় - তারা ঠিক একই জিনিস। যাইহোক, মূল জিনিসটি আপনাকে অবশ্যই সামঞ্জস্যপূর্ণ হতে হবে

PS আমি সারাক্ষণ এই ধরণের "কী সঠিক জিনিস" এর সাথে লড়াই করি।


1
আধুনিক বিশ্বে, "ধারাবাহিক" অর্থ বিশ্বব্যাপী সমস্ত দল জুড়ে সুসংগত, যা স্ট্যাক ওভারফ্লোয়ের লক্ষ্যগুলির মধ্যে একটি। যদি আমি প্রস্তাব দিতে পারি তবে আসুন স্ট্রিং.এম্পটি ব্যবহার করুন।
পাভেল রদজিভিলভস্কি

1
কিছু ভাষায় একটি খালি ধ্রুবক থাকে না এবং আমি ভাবতে পারি এমন সমস্ত ভাষাতেই শূন্য দৈর্ঘ্যের স্ট্রিংয়ের অনুমতি দেওয়া যায়। সুতরাং আমি অন্যান্য ভাষার সাথে ধারাবাহিকতার জন্য "" ভোট দিই। :)
TomXP411

4

এটি সম্পূর্ণভাবে একটি কোড-শৈলীর পছন্দ, কীভাবে নেট নেট স্ট্রিংগুলি পরিচালনা করে। তবে, এখানে আমার মতামত :)

স্থির পদ্ধতি, বৈশিষ্ট্য এবং ক্ষেত্রগুলিতে অ্যাক্সেস করার সময় আমি সর্বদা ছাত্রলীগের নাম ব্যবহার করি: String.Emptyবা Int32.TryParse(...)বা orDouble.Epsilon

নতুন দৃষ্টান্ত ঘোষণার সময় আমি সর্বদা সি # কীওয়ার্ড ব্যবহার করি: int i = 0;বাstring foo = "bar";

আমি খুব কমই অঘোষিত স্ট্রিং লিটারেলগুলি ব্যবহার করি কারণ আমি কোডটি পুনরায় ব্যবহারযোগ্য নাম ধ্রুবকগুলিতে একত্রিত করতে স্ক্যান করতে সক্ষম হতে চাই। সংকলকটি যাহাই হউক না কেন আক্ষরিকের সাথে স্থির প্রতিস্থাপন করে তাই যাদু স্ট্রিং / সংখ্যাগুলি এড়ানোর এবং নাম দিয়ে তাদের আরও কিছুটা অর্থ দেওয়ার উপায় এটি way প্লাস মান পরিবর্তন করা সহজ।


3

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


3

প্রথম দুটি যে কোনও একটিই আমার কাছে গ্রহণযোগ্য হবে। আমি শেষটি এড়াতে পারব কারণ উদ্ধৃতিগুলির মধ্যে একটি স্থান রেখে বাগ প্রবর্তন করা তুলনামূলকভাবে সহজ। এই নির্দিষ্ট বাগ পর্যবেক্ষণ দ্বারা খুঁজে পাওয়া কঠিন হবে। কোনও টাইপও ধরে নিচ্ছি না, সমস্ত শব্দার্থগতভাবে সমান।

[Edit]

এছাড়াও, আপনি সর্বদা হয় stringবা Stringসামঞ্জস্যের জন্য ব্যবহার করতে চাইতে পারেন , তবে এটি কেবল আমার।


আমি এই মন্তব্যটির সাথে একমত, তবে আমি অলস হয়ে গেলেও আমি বিপজ্জনকভাবে বাঁচি। কোনও ইভেন্টে, আমি মনে করি না যে ভেরিয়েবল ঘোষণার বাইরে এই কোডটি স্ট্রিং ব্যবহারের আগে লিখতে আমার কাছে উপলক্ষ আছে write আসলে, এটি আমার বিরক্তিকর যে ঝুঁকি থাকা সত্ত্বেও আমাকে আমার স্ট্রিংগুলি একেবারে শুরু করতে হবে।
এনোকএনআরল - আনন্দগোপাল পারদু

3

আমি ব্যক্তিগতভাবে দু'বার (মাইনর) সমস্যার ফলস্বরূপ প্রত্যক্ষ করেছি। একবার টিম-ভিত্তিক প্রোগ্রামিংয়ে নতুন জুনিয়র বিকাশকারীর ভুলের কারণে হয়েছিল এবং অন্যটি ছিল একটি সাধারণ টাইপও, তবে ঘটনাটি স্ট্রিংটি ব্যবহার করছে mp এফটি উভয় ইস্যু এড়িয়ে যেতে পারত।

হ্যাঁ, এটি একটি রায় দেওয়ার আহ্বান, তবে যখন কোনও ভাষা আপনাকে কাজ করার একাধিক উপায় দেয়, তখন আমি সর্বাধিক সংকলক তদারকি এবং সবচেয়ে শক্তিশালী সংকলন-সময় প্রয়োগকারীর দিকে ঝুঁকতে থাকি। যে না ""। এটি সুনির্দিষ্ট অভিপ্রায় প্রকাশের বিষয়ে।

আপনি যদি স্ট্রিং টাইপ করেন EM এমপি বা স্ট্রং.এম্পটি, সংকলক আপনাকে জানায় যে আপনি এটি ভুল করেছেন। অবিলম্বে। এটি কেবল সংকলন করবে না। বিকাশকারী হিসাবে আপনি সুনির্দিষ্ট অভিপ্রায় উল্লেখ করছেন যে সংকলক (বা অন্য বিকাশকারী) কোনওভাবেই ভুল ব্যাখ্যা করতে পারে না, এবং আপনি যখন এটি ভুল করেন, আপনি কোনও বাগ তৈরি করতে পারবেন না।

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

স্ট্রিংয়ের অনেক আগে mp এমপিটি এমন একটি জিনিস ছিল যা আমি একটি স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করেছি যা EMPTY_STRING ধ্রুবককে সংজ্ঞায়িত করেছে। স্ট্রিং.আম্পটি অনুমোদিত নয় এমন ক্ষেত্রে বিবৃতিতে আমরা এখনও সেই ধ্রুবকটি ব্যবহার করি।

যখনই সম্ভব, আপনার জন্য কাজ করার জন্য সংকলকটি রেখে দিন এবং মানুষের ত্রুটির সম্ভাবনাটি যতটা ছোটই হোক না কেন, নির্মূল করুন। আইএমও, এই ট্রাম্পগুলি "পাঠযোগ্যতা" হিসাবে অন্যরা উদ্ধৃত করেছে।

নির্দিষ্টকরণ এবং সংকলন সময় প্রয়োগকারী। এটা রাতের খাবারের জন্য


3

আমি "" ব্যবহার করি কারণ এটি আমার কোডে স্বাদযুক্ত হলুদ বর্ণের হয়ে উঠবে ... কোনও কারণে স্ট্রিং mp এমপিটি আমার ভিজ্যুয়াল স্টুডিও কোড থিমের মধ্যে সব সাদা। এবং আমি বিশ্বাস করি যে আমার কাছে সবচেয়ে গুরুত্বপূর্ণ।


2

সংকলক দীর্ঘমেয়াদে তাদের সমস্ত একই করা উচিত। একটি স্ট্যান্ডার্ড বাছাই করুন যাতে আপনার কোডটি পড়া সহজ হয়ে যায় এবং এটি দিয়ে আটকে যান।


2

আমি কিছু কোডের দিকে তাকিয়ে ছিলাম এবং এই প্রশ্নটি আমার মনে ছড়িয়ে পড়েছিল যা আমি কিছুক্ষণ আগে পড়েছি। এটি অবশ্যই পঠনযোগ্যতার প্রশ্ন।

নিম্নলিখিত সি # কোড বিবেচনা করুন ...

(customer == null) ? "" : customer.Name

বনাম

(customer == null) ? string.empty : customer.Name

আমি ব্যক্তিগতভাবে পরেরটি কম अस्पष्ट এবং পড়া সহজ।

অন্যদের দ্বারা নির্দেশিত হিসাবে প্রকৃত পার্থক্য নগণ্য।


1

আমি মনে করি যে দ্বিতীয়টি "যথাযথ", তবে সত্য কথা বলতে আমি এটি বিবেচনা করি না will সংকলকটি যথাযথ একই বাইকোডে সংকলন করতে যথেষ্ট স্মার্ট হওয়া উচিত। আমি নিজেই "" ব্যবহার করি।


1

যদিও পার্থক্যটি খুব কম, তবুও পার্থক্যটি বিদ্যমান।

1) স্ট্রিংয়ের সময় "" বস্তু তৈরি করে। তবে এই বস্তুটি একবার তৈরি হবে এবং কোডে আপনার যদি অন্য একটি থাকে তবে পরে স্ট্রিং পুল থেকে রেফারেন্স করা হবে।

২) স্ট্রিং এবং স্ট্রিং একই, তবে আমি স্ট্রিং.এম্পটি (পাশাপাশি স্ট্রিং.ফর্ম্যাট, স্ট্রিং.কপি ইত্যাদি) ব্যবহার করার পরামর্শ দিচ্ছি যেহেতু ডট নোটেশনটি ক্লাস নির্দেশ করে, অপারেটর নয়, এবং মূলধন পত্রের সাথে ক্লাস শুরু হওয়ার সাথে সঙ্গতিপূর্ণ সি # কোডিং মান।


1
string.Empty হয় "", চেক উৎস
dss539

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... আমার যত্নের স্তরটি কম ;-)


1
এমএসডিএন ব্লগ পোস্টটি ২০০৩ সালে ছিল .... আপনি কি নিশ্চিত যে সাম্প্রতিক .NET সংস্করণগুলির জন্য এটি এখনও সত্য?!
কার্স্টেন শ্যাট্টে

@ কার্সটেনশট: আমার কাছে মনে হয়েছে যে এই জাতীয় বৈশিষ্ট্যটি খুব বেশি পরিবর্তন করার উদ্দেশ্যে নয় ... এবং যদি এটি হয় তবে এটি সম্পর্কে ইন্টারনেটে কিছুটা গুঞ্জন ছিল।
sergiol

3
@ সার্জিওল যদি ক্ষেত্রটি আক্ষরিক চেয়ে বেশি দক্ষ হয় তবে এটি স্পষ্টতই পারফরম্যান্স বাগ bu সুতরাং আশা করা যাচ্ছে যে এটি এতক্ষণে স্থির হয়ে যাবে।
কনরাড রুডল্ফ

1

খালি স্ট্রিং খালি সেট ঠিক নামের মতো যা প্রত্যেকে কল করতে ব্যবহার করে ""। এছাড়াও আনুষ্ঠানিক ভাষায় একটি বর্ণমালা থেকে তৈরি স্ট্রিংগুলির শূন্য দৈর্ঘ্য রয়েছে have সেট এবং স্ট্রিং উভয়েরই এর জন্য একটি বিশেষ প্রতীক রয়েছে। খালি স্ট্রিং: ε এবং খালি সেট: ∅। আপনি যদি এই শূন্য দৈর্ঘ্যের স্ট্রিং সম্পর্কে কথা বলতে চান তবে আপনি এটিকে খালি স্ট্রিং বলবেন যাতে সকলেই আপনাকে বোঝাচ্ছে ঠিক কী জানেন। এখন আপনি string.Emptyকোডটি কেন ব্যবহার করবেন না তা খালি স্ট্রিংয়ের নাম রাখলে এর উদ্দেশ্যটি সুস্পষ্ট shows ক্ষতি হ'ল এটি কোনও ধ্রুবক নয় এবং অতএব বৈশিষ্ট্যগুলির মতো সর্বত্র পাওয়া যায় না। (এটি কিছু প্রযুক্তিগত কারণে স্থির নয়, রেফারেন্স উত্সটি দেখুন))


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