তুলনা অপারেটর নাল ইন্টের সাথে কীভাবে কাজ করে?


151

আমি নালার ধরণগুলি শিখতে শুরু করেছি এবং নিম্নলিখিত আচরণগুলিতে চলে এসেছি।

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

int? a = null;
int? b = 1;

if (a < b)
    Console.WriteLine("{0} is bigger than {1}", b, a);
else if (a > b)
    Console.WriteLine("{0} is bigger than {1}", a, b);
else
    Console.WriteLine("both {0} and {1} are equal", a, b);

আমি আশা করছিলাম যে কোনও অ-নেতিবাচক পূর্ণসংখ্যা শূন্যের চেয়ে বেশি হবে, আমি কি এখানে কিছু মিস করছি?


5
বেশ কয়েকটি কেস দেখতে এখানে একটি ছোট নেট নেট
উয়ে কেইম

উত্তর:


207

এমএসডিএন অনুসারে - এটি "অপারেটর" বিভাগে পৃষ্ঠাটি নিচে রয়েছে:

আপনি যখন নলযোগ্য প্রকারের সাথে তুলনা করেন, যদি একধরণের নালাগুলির মধ্যে একটির মান হয় nullএবং অন্যটি না হয় falseতবে সমস্ত তুলনাগুলি বাদে মূল্যায়ন করে!=

সুতরাং উভয় a > bএবং a < bমূল্যায়ন falseযেহেতু aশূন্য ...


2
আমার প্রকল্পগুলিতে আমি বর্তমানে VB.NET ব্যবহার করছি এবং দেখে মনে হচ্ছে যে nothing <> 1= nullভিবিতে যেখানে null != 1= trueসি তে # - আমি লিনকপ্যাডটি বিবৃতিগুলি পরীক্ষা করার জন্য ব্যবহার করছি
লুক টি ওব্রায়েন

2
আমি কেবল বিস্মিত হয়েছি, এবং এটি Lifted Operatorsসি # স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 70৩70০১১০ / কী- কেয়ার - লিফটেড- অপারেটরগুলিতে লক্ষ্য করার মতো - আমি ভেবেছিলাম যে এই কারণেই হয়তো ভিবি.এনইটি বিভিন্ন ফলাফল প্রত্যাবর্তন করে
লূক টি ওব্রায়েন

44

এমএসডিএন যেমন বলেছে

আপনি যখন নলযোগ্য প্রকারের সাথে তুলনা করেন, যদি কোনও এক প্রকারের মূল্য নাল হয় এবং অন্যটি হয় না, তবে সমস্ত তুলনা মিথ্যা হিসাবে মূল্যায়ন করে! = বাদে (সমান নয়)। এটি ধরে নেওয়া গুরুত্বপূর্ণ নয় যেহেতু একটি বিশেষ তুলনা মিথ্যা প্রত্যাবর্তন করে, বিপরীত ক্ষেত্রেটি সত্য হয়। নিম্নলিখিত উদাহরণে, 10 টি বৃহত্তর, কম বা কম ন্যূন নয়। কেবল num1! = Num2 সত্যকে মূল্যায়ন করে।

int? num1 = 10;
int? num2 = null;
if (num1 >= num2)
{
    Console.WriteLine("num1 is greater than or equal to num2");
}
else
{
    // This clause is selected, but num1 is not less than num2.
    Console.WriteLine("num1 >= num2 returned false (but num1 < num2 also is false)");
}

if (num1 < num2)
{
    Console.WriteLine("num1 is less than num2");
}
else
{
    // The else clause is selected again, but num1 is not greater than 
    // or equal to num2.
    Console.WriteLine("num1 < num2 returned false (but num1 >= num2 also is false)");
}

if (num1 != num2)
{
    // This comparison is true, num1 and num2 are not equal.
    Console.WriteLine("Finally, num1 != num2 returns true!");
}

// Change the value of num1, so that both num1 and num2 are null.
num1 = null;
if (num1 == num2)
{
    // The equality comparison returns true when both operands are null.
    Console.WriteLine("num1 == num2 returns true when the value of each is null");
}

/* Output:
 * num1 >= num2 returned false (but num1 < num2 also is false)
 * num1 < num2 returned false (but num1 >= num2 also is false)
 * Finally, num1 != num2 returns true!
 * num1 == num2 returns true when the value of each is null
 */

25

সংক্ষেপ করার জন্য: নাল সঙ্গে কোনো বৈষম্য তুলনা ( >=, <, <=, >) ফেরৎ falseএমনকি যদি উভয় operands নাল হয়। অর্থাত

null >  anyValue //false
null <= null     //false

নাল ( ==, !=) এর সাথে কোনও সমতা বা অ-সাম্যের তুলনা 'প্রত্যাশার মতো' কাজ করে। অর্থাত

null == null     //true
null != null     //false
null == nonNull  //false
null != nonNull  //true

এটি উভয় জন্য একই int? nonNullএবং int notNull?
Кто

1
@ КоеКто, একই আচরণ Nullable<NumberTypes> = null। যাচাই.
আর্ট্রু

2

সি # এর সাথে এসকিউএল তুলনা করা

সি #: এ = নাল এবং বি = নাল => এ == বি => সত্য

এসকিউএল: এ = নাল এবং বি = নাল => এ == বি => মিথ্যা

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