বুলিয়ান কেন? টুস্ট্রিং আউটপুট "সত্য" এবং "সত্য" নয়


235
true.ToString() 
false.toString();

Output:
True
False

এটি "সত্য" এবং "সত্য" না হওয়ার কোনও বৈধ কারণ আছে কি? এক্সএমএল এর বুলিয়ান টাইপটি লোয়ার কেস হিসাবে XML লেখার সময় এটি ভেঙে যায় এবং সি # এর সত্য / মিথ্যা (যদিও সিএলএস সম্পর্কে নিশ্চিত নয়) এর সাথে সামঞ্জস্য হয় না।

হালনাগাদ

C # তে এটি ঘুরে দেখার আমার অত্যন্ত হ্যাকি উপায় (এক্সএমএল ব্যবহারের জন্য)

internal static string ToXmlString(this bool b)
{
    return b.ToString().ToLower();
}

অবশ্যই এটি স্ট্যাকের সাথে আরও 1 টি পদ্ধতি যুক্ত করে তবে সর্বত্র ToLowers () সরিয়ে দেয়।


1
ভেবেছি আমি এটি উল্লেখ করেছি ... আমি একটি এমএসডিএন ব্লগে সি # তে বুলিয়ান টাইপ হিসাবে "ট্রু" কে deserialize করার জন্য কিছু চালাক কাজ পড়েছি! দেখতে http://blogs.msdn.com/helloworld/archive/2009/04/03/workaround-to-deserialize-true-false-using-xmlserializer.aspx
পিটার

23
আমি প্রতিস্থাপন চাই return b.ToString().ToLower();সঙ্গে return b ? "true" : "false";। তাত্ত্বিকভাবে লোকালের উপর নির্ভর করতে পারে এমন কোনও পদ্ধতির উপর ক্লিনার, আরও দক্ষ, কম নির্ভরশীল (যদিও এটি বর্তমান বাস্তবায়নে নেই)।
জন হান্না

1
একটি রেস্টর্ট ওয়েব সার্ভিস কল করার জন্য কোনও বস্তুর সর্বজনীন বৈশিষ্ট্যগুলি কোয়েরি স্ট্রিংয়ের ক্রমিকায়িত করার জন্য রেস্টশার্প ব্যবহার করার সময় এটি বেশ বিরক্তিকর। যদি REST এপিআই যদি বাউলদের ক্ষেত্রে কেস-সংবেদনশীল হয় (যেমন গুগল ডাইরেকশনস এপিআই) তবে এটি API কল ব্যর্থ করে।
কার্লোস পি

8
"টোস্ট্রিং। নেট ফ্রেমওয়ার্কের প্রধান বিন্যাস পদ্ধতি It এটি কোনও বস্তুকে তার স্ট্রিং উপস্থাপনায় রূপান্তর করে যাতে এটি প্রদর্শনের জন্য উপযুক্ত " " (জোর আমার)। অবজেক্ট.টোস্ট্রিং কোনও সিরিয়ালাইজেশন প্রক্রিয়া নয়। :)
রাইটমিস

1
হ্যাঁ হ্যাঁ, এটি এমন এক অভিজ্ঞতার কারণ যা বর্তমানে তাত্ত্বিক ঝুঁকির বিরুদ্ধে আমাকে রক্ষা করতে পরিচালিত করে যদিও এটি বর্তমানে ঘটে না।
জন হান্না

উত্তর:


165

কেবলমাত্র মাইক্রোসফ্টের লোকেরা এই প্রশ্নের উত্তর দিতে পারে। তবে, আমি এটি সম্পর্কে কিছু মজাদার তথ্য দিতে চাই;)

প্রথমে, এটি বুলিয়ান Tটোস্ট্রিং () পদ্ধতি সম্পর্কে এমএসডিএন-এ যা বলেছে :

ফেরত মূল্য

প্রকার: System.String

TrueString যদি এই উদাহরণস্বরূপ মান true থাকে বা FalseString যদি এই উদাহরণস্বরূপ মান মিথ্যা।

মন্তব্য

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

মজার আসল # 1 এখানে আসবে: এটি ট্রুস্ট্রিং বা ফ্যালসস্ট্রিং মোটেও ফেরায় না। এটি হার্ডকোডযুক্ত আক্ষরিক "সত্য" এবং "মিথ্যা" ব্যবহার করে " ক্ষেত্রগুলি ব্যবহার করা হলে আপনার কোনও ভাল কাজ হবে না, কারণ সেগুলি কেবল পঠনযোগ্য হিসাবে চিহ্নিত হয়েছে, তাই এগুলিকে কোনও পরিবর্তন করার দরকার নেই।

বিকল্প পদ্ধতি, বুলিয়ান। টুস্ট্রিং (আইফর্ম্যাটপ্রোভিডার) এমনকি মজাদার:

মন্তব্য

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

সমাধান কি? আপনি ঠিক কী করার চেষ্টা করছেন তার উপর নির্ভর করে। যাই হোক না কেন, আমি বাজি ধরছি এটির জন্য একটি হ্যাক লাগবে;)


2
আমি ভুল হলে আমাকে সংশোধন করুন, তবে এর ব্যাখ্যায় আমি কোনও ভুল দেখছি না Boolean.ToString()bool.TrueStringএকটি পঠনযোগ্য ক্ষেত্র যা হার্ডকোডযুক্ত আক্ষরিক "সত্য" ধারণ করে । অতএব, এটি যে ফিরে আসে TrueStringতা বলা সমান , এটি এতে সঞ্চিত হার্ডকোডযুক্ত আক্ষরিক "ট্রু" প্রত্যাবর্তন করে, একটি স্ট্রিং ফেরত দেওয়া সর্বদা মান দেয় এবং কোনও রেফারেন্স দেয় না।
ফার্নান্দো নীরা

21
পর্যবেক্ষণযোগ্য ফলাফল একই। বাস্তবায়ন হয় না।
ভোজিসলাভ স্টোজকোভিক

1
সি # সংকলনের ফলে বুলিয়ান T ট্রুইস্ট্রিংকে সংকলিত ফলাফলগুলিতে "সত্য" দিয়ে প্রতিস্থাপন করা হবে না। যদি তারা আসলে বুলিয়ান.ট্রু স্ট্রিং ব্যবহার করে থাকে তবে আপনি বুলিয়ান পরিবর্তন করতে প্রতিবিম্বটি ব্যবহার করতে পারেন r ট্রুস্ট্রিংকে একটি ছোট আকারের সংস্করণ ফিরিয়ে দিতে ... অবশ্যই কে জানে যে এটি কী ভাঙবে। আপনি এখনও বুলিয়ানতে টস্ট্রিং পদ্ধতিটি প্রতিস্থাপন করতে প্রতিবিম্বটি ব্যবহার করতে পারেন যাতে এটি নীচের কেসের রূপগুলি দেয়।
দেউই ভোজেল

2
@ ফার্নান্দোনিরা, যদি আগামীকাল হার্ডকোডযুক্ত আক্ষরিক TrueStringপরিবর্তন করা হয়, বলুন, "সত্য" ছোট করার জন্য, পদ্ধতিটি bool.ToString()এখনও পাস্কাল কেস "ট্রু" আক্ষরিক প্রত্যাবর্তন করবে।
সার্জ 9

1
আমি ভিজ্যুয়াল বেসিককে দোষ দিই, যা সত্য এবং মিথ্যাটিকে এর আক্ষরিক মান হিসাবে ব্যবহার করে।
এমক্রোকল

105

... কারণ .NET পরিবেশটি অনেকগুলি ভাষাকে সমর্থন করার জন্য ডিজাইন করা হয়েছে।

বুলিয়ান ডেটাটাইপ সমর্থন করার জন্য সিস্টেম.বুলিয়ান (mscorlib.dll এ) ভাষা দ্বারা অভ্যন্তরীণভাবে ব্যবহার করার জন্য ডিজাইন করা হয়েছে। সি # এর কীওয়ার্ডগুলির জন্য সমস্ত ছোট হাতের অক্ষর ব্যবহার করে, সুতরাং 'বুল', 'সত্য' এবং 'মিথ্যা'।

VB.NET তবে স্ট্যান্ডার্ড কেসিং ব্যবহার করে: অতএব 'বুলিয়ান', 'সত্য' এবং 'মিথ্যা'।

যেহেতু ভাষাগুলিকে একসাথে কাজ করতে হবে, আপনার সত্য হতে পারে না o টুস্ট্রিং () (সি #) ট্রু.টস্ট্রিং () (ভিবি.এনইটি) কে আলাদা ফলাফল দেয়। সিএলআর ডিজাইনারগণ টসস্ট্রিং () ফলাফলের জন্য স্ট্যান্ডার্ড সিএলআর কেসিং স্বরলিপিটি বেছে নিয়েছে।

বুলিয়ান সত্যের স্ট্রিং প্রতিনিধিত্বকে বুলিয়ান। ট্রুইস্ট্রিং হিসাবে সংজ্ঞায়িত করা হয়।

(সিস্টেমের সাথে একইরকম একটি মামলা রয়েছে। স্ট্রিং: সি # এটিকে 'স্ট্রিং' টাইপ হিসাবে উপস্থাপন করে)।


4
তাদের দেখতে চেহারা থেকে ভিবি সমন্বিত করতে হয়েছিল
ক্রিস এস

5
আমি বলব সি # হ'ল "বিজোড়" ভাষা। .NET- তে সর্বসাধারণের নাম হ'ল ক্যামেলকেস - সিস্টেম.বুলিয়ান, ট্রু, সিস্টেম। স্ট্রিং ইত্যাদি it's এটি সি # এর সি heritageতিহ্য যা স্ট্রিং টু স্ট্রিং, বুলিয়ান থেকে বুলি, সত্য থেকে সত্য ইত্যাদি ইত্যাদিকে সরিয়ে দেয় (যদিও আমার ব্যক্তিগত পছন্দ এখনও সি #)।
stusmith

4
অতিরিক্তভাবে, ভাল কারণটি (আমার জন্য) লোয়ার কেসে রূপান্তরিত করা সহজ এবং এটিকে ক্যামেলকেস করা কঠিন যখন বিশেষত যখন ভি জব @ জহন বার্নস বলেছিলেন ঠিক তেমন ব্যবহৃত হয়। অন্যথায় ভিবি ব্যবহারকারী কখনও ব্যবহার করতে পারে না এবং ব্যবহার করবে না ToString()এবং তারা পছন্দ মতো ব্যবহার করতে বাধ্য করেছিল If(b, "True", "False")। সুতরাং আমার মতো সি # ব্যবহারকারীর ব্যবহার করার জন্য ত্যাগ করতে হবে ToLower():)
কলমেলএএনএন

2
@MarkLopez আপনার মন্তব্য ভুল, এখানে দেখুন: msdn.microsoft.com/en-us/library/c8f5xwh7.aspx । এছাড়াও, বুলিয়ান সংজ্ঞাটি অনুসন্ধান করা প্রকাশ করে এটি বাস্তবে একটি কাঠামো এবং উভয়ের একই বৈশিষ্ট্য রয়েছে।
tsemer

1
আপনার উত্তরটি কিছুটা হালকা করে দিলেও আমি বুঝতে পারি না যে "সত্য" "সত্য" এর চেয়ে আরও "মানক" কীভাবে হয়। মনে হয় পরেরটি অনেক বেশি জনপ্রিয়।
সামান্য

50

এক্সএমএলের জন্য আপনি এক্সএমএল কনভার্ট.টোস্ট্রিং পদ্ধতি ব্যবহার করতে পারেন ।


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

25

এটিকে সমস্ত ছোট ক্ষেত্রে রূপান্তর করা সহজ কোড।

"সত্য" কে "সত্য" এ রূপান্তর করা এত সহজ নয়, তবে।

true.ToString().ToLower() 

আমি এক্সএমএল আউটপুট জন্য কি ব্যবহার।


অনেক ভাষার পক্ষে সমর্থন করার জন্য @ স্টমসমিথ উত্তর ছাড়াও, মাইক্রোসফ্ট বুলিয়ান ToString()ফলাফলের ভিবি চেহারা পছন্দ করার জন্য এটি দুর্দান্ত কারণ ।
কলমেলএএনএন

@ দমিহ: আসলে প্রশ্নটি "কেন"। নির্বাচিত উত্তর, এর বিপরীতে, আসলে যতটা উত্তর দিতে পারে ততই কাছে আসে।
নাইয়ারগডস

1
এখনো ভাল; ToLowerInvariant()
ভলকান রেভেন

3
"সত্য "টিকে" সত্য "এ রূপান্তর করতে আপনি সিস্টেম.গ্লোবালাইজেশন.ক্ল্যাচারআইনফো.আইভিনিয়ার্টকালচার.টেক্সটইনফো.টোটিটেল কেস ব্যবহার করতে পারেন।
জেনি ও'রেইলি

8

এটি সি # এর সাথে কীভাবে সামঞ্জস্যপূর্ণ নয়? বুলিয়ান.পার্স এবং বুলিয়ান T ট্রাই পার্স হ'ল সংবেদনশীল এবং পার্সিংটি বুলিয়ান T ট্রুইস্ট্রিং বা বুলিয়ান F ফ্যালস স্ট্রিংয়ের সাথে "সত্য" এবং "মিথ্যা" এর সাথে তুলনা করে করা হয়।

সম্পাদনা করুন: প্রতিচ্ছবিতে বুলিয়ান T টুস্ট্রিং পদ্ধতিটি দেখার সময় দেখা যাচ্ছে যে স্ট্রিংগুলি শক্ত কোডড রয়েছে তাই টুস্ট্রিং পদ্ধতিটি নিম্নরূপ:

public override string ToString()
{
    if (!this)
    {
        return "False";
    }
    return "True";
}

23
বাহ ... এটি সম্ভবত সি # এর একমাত্র প্রসঙ্গ যেখানে "যদি (এটি)" নির্মাণটি বৈধ!
তামাস সিজনেজে

2
সুতরাং কেন এটি "মিথ্যা" ফেরত
ক্রিস এস

কী অদ্ভুত কাজ ... আমি বলতে চাইছি শর্তটি উল্টে যাবে।
নিকোডেমাস 13

6
@ টামাসজিনিজে That's probably the only context in C# where the construct "if (!this)" is valid! আপনি আমাকে চ্যালেঞ্জ করেছেন, আপনি loose িলে । gist.github.com/Steinब्लॉक /10 df18afb948866be1ba - এছাড়াও আজ জর্জ বুলের 200 তম
বার্থডে

ভাবছেন কেন এটি করা হয়নি return this ? "True" : "False";? (অন্য একটি অস্বাভাবিক ঘটনা যেমন আপনি প্রায়শই শর্ত thisহিসাবে দেখেন না ?:, তবে এখানে এটি বোধগম্য হবে))
ডারেল হফম্যান

7

এটি ইতিমধ্যে সম্বোধন করার উপায়টির কারণ আমি জানি তবে এটি "কাস্টম" বুলিয়ান ফর্ম্যাটিংয়ের ক্ষেত্রে আমার দুটি এক্সটেনশন পদ্ধতি রয়েছে যা আমি আর বাঁচতে পারি না :-)

public static class BoolExtensions
{
    public static string ToString(this bool? v, string trueString, string falseString, string nullString="Undefined") {
        return v == null ? nullString : v.Value ? trueString : falseString;
    }
    public static string ToString(this bool v, string trueString, string falseString) {
        return ToString(v, trueString, falseString, null);
    }
}

ব্যবহার তুচ্ছ। নিম্নলিখিতগুলি বিভিন্ন বুল মানগুলিকে তাদের পর্তুগিজ উপস্থাপনায় রূপান্তর করে:

string verdadeiro = true.ToString("verdadeiro", "falso");
string falso = false.ToString("verdadeiro", "falso");
bool? v = null;
string nulo = v.ToString("verdadeiro", "falso", "nulo");

"আপনি কোনও শ্রেণি বা ইন্টারফেস প্রসারিত করতে এক্সটেনশন পদ্ধতিগুলি ব্যবহার করতে পারেন, তবে সেগুলি ওভাররাইড না করে an একই ইন্টারফেস পদ্ধতি বা শ্রেণি পদ্ধতি হিসাবে একই স্বাক্ষর সহ একটি এক্সটেনশন পদ্ধতি কখনই ডাকা হবে না comp সংকলন সময়ে, এক্সটেনশন পদ্ধতিগুলির তুলনায় সর্বদা কম অগ্রাধিকার থাকে টাইপ নিজেই সংজ্ঞায়িত উদাহরণ পদ্ধতি। " আপনার সমাধানটি কি কাজ করে? (টোস্ট্রিং () উত্তরাধিকার সূত্রে উত্তরাধিকারসূত্রে প্রাপ্ত হওয়ায় ওভাররেড করা যায়?)
j ই

1
আমি আমার আগের মন্তব্যে অনুমান করি এই স্বাক্ষরটি কোনও কিছুর উপর নির্ভর করে না।
jwize

@ জাজাইজ হ্যাঁ, এগুলি নতুন স্বাক্ষর, সুতরাং এটি একটি ওভারলোড ওভাররাইড নয় ;-)
লাউডেনভিয়ার

0

true"সত্য" কারণটি XML মানগুলির সাথে মাইক্রোসফ্টের দৃ strong় বন্ধন।

উইকিপিডিয়া থেকে : "এক্সটেনসিবল মার্কআপ ল্যাঙ্গুয়েজ (এক্সএমএল) হ'ল একটি মার্কআপ ল্যাঙ্গুয়েজ যা নথিগুলিকে এনকোডিংয়ের জন্য নিয়মের একটি সেটকে একটি ফর্ম্যাটে সংজ্ঞায়িত করে যা মানব-পঠনযোগ্য এবং মেশিন-পঠনযোগ্য উভয়ই ।"

মানব-পঠনযোগ্য ব্যক্তিগত, তবে এক্সএমএল এর দৃষ্টিতে, "1" সংখ্যার জায়গায় "ওয়ান" শব্দটি ব্যবহার করা পছন্দ করা হয়। আপনি এটি এনাম ব্যবহার করে লক্ষ্য করবেন যেহেতু শব্দটির মানটির পরিবর্তে "" ফার্স্ট অপশন "বা" 1 "এর পরিবর্তে ক্রমবর্ধমান হয়।

তেমনি, পাঠ্যটি সাধারণত ক্যামেলকেসিংয়ের অনুসরণ করে । সুতরাং, "স্ট্রিং" এর পরিবর্তে এক্সএমএল "স্ট্রিং" পছন্দ করে। এই কারণেই বুলিয়ান T ট্রুইস্ট্রিং হ'ল "সত্য" এবং বুলিয়ান F ফ্যালসস্ট্রিং ডিফল্টরূপে "মিথ্যা"।


7
মজার বিষয় যে এক্সএমএল বুলিয়ান ভেঙে যাবে যদি আপনি "সত্য" এ সেট করেন এবং "সত্য" না তখন? - "নোট করুন যে এক্সএমএল কেস-সংবেদনশীল এবং এক্সএমএল স্পেসিফিকেশন" সত্য "এবং" মিথ্যা "বুলিয়ান মানগুলির বৈধ সেট হিসাবে স্বীকৃতি দিয়েছে"
পান্ডাউড

-1

এটি সম্ভবত পুরানো ভিবি নন থেকে শুরু হয়েছে .NET দিন যখন bool.ToString সত্য বা মিথ্যা উত্পাদন করেছিল produced


3
.NET এর আগে ভিবিতে বুলিয়ান ডেটা টাইপ (আসলে, সমস্ত ডেটা টাইপ) এর পদ্ধতি ছিল না।
স্যাম অ্যাক্স

1
ভিবি 6-তে আপনি এখনও বুলিয়ান টাইপকে স্ট্রিংয়ে রূপান্তর করতে পারেন (এটি স্ট্রিং ভেরিয়েবলের সাথে নির্ধারিত করার সহজতম উপায়)। এ সম্পর্কে আশ্চর্যের বিষয়টি হ'ল রূপান্তরটি আসলে সংস্কৃতি নির্দিষ্ট ছিল, তাই চলমান কম্পিউটারে যদি আপনার সংস্কৃতি ভাষা নরওয়েজিয়ান হয় তবে ফলাফলটি "সত্য" এবং "মিথ্যা" পরিবর্তে "সান" এবং "উসান" ছিল! এটি প্রায়শই সমস্যার সৃষ্টি করে যদি বুলিয়ান সেটিংস কোনও পাঠ্য ফাইলে সংরক্ষণ করা হয় এবং কম্পিউটারটি ইংরেজী (মার্কিন) সংস্কৃতিতে সেটআপ করা আলাদা পরিবেশে রফতানি করা হত।
বিস্মিত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.