"প্রসারণ" ধরণের প্রকারের ডিফল্ট মান কত? (প্রশ্ন চিহ্ন সহ)?


107

সি # তে, শ্রেণীর উদাহরণের ধরণের পরিবর্তকের ডিফল্ট মান কত int??

উদাহরণস্বরূপ, নিম্নলিখিত কোডে, কোন মানটি MyNullableIntযদি তা স্পষ্টভাবে কখনই বরাদ্দ না করা হয়?

class MyClass
{
    public int? MyNullableInt;
}

(সম্ভবত মনে হয় উত্তরটি অবশ্যই হয় nullবা হয় 0তবে তবে এটি কোনটি?)


9
ডাউনটা কেন? (আচরণের পরীক্ষা করার জন্য কোডটি চালনা না করেই এই প্রশ্নের উত্তর আমার কাছে প্রাথমিকভাবে স্পষ্ট ছিল না; এবং আশ্চর্যের বিষয়, স্ট্যাকওভারফ্লোতে আমি এই প্রশ্নের নকলটি খুঁজে পাইনি বা গুগলের মাধ্যমে সহজেই অন্য কোথাও খুঁজে পাচ্ছি না।)
জন স্নাইডার

4
আপনি এখানে দেখতে পারেন - প্রথম গুগল আমার জন্য হিট।
500 -

4
@ 500 - যখন আমি গবেষণা করছিলাম তখন আমি সেই নিবন্ধটি পেয়েছিলাম - আমি এটির নীচে আমার নিজের উত্তরটিতে আসলে লিঙ্ক করেছি - তবে যতদূর আমি বলতে পারি, নিবন্ধটি স্পষ্টভাবে জানায় না যে একটি নলাবদ্ধ টাইপের উদাহরণের ডিফল্ট মান নাল এটি বলে যে "HasValue এর জন্য ডিফল্ট মানটি মিথ্যা The মানটির কোনও ডিফল্ট মান নেই", তবে এটি কোনও অতিরিক্ত খনন না করে সরাসরি আমার মূল প্রশ্নের উত্তর দেয় না।
জন স্নাইডার

4
আমি অবাক হয়েছি কারণ এটি ছিল কারণ আপনি কেবল একটি ব্রেকপয়েন্ট নির্ধারণ করতে পারেন এবং মানটি কী তা দেখতে পেতেন, বা তাত্ক্ষণিক উইন্ডোতে টাইপ করে int? x;দেখুন ফলাফল কী?
রুফাস এল

উত্তর:


139

এর জন্য ডিফল্ট মান int?- এবং "ধরণ" ব্যবহার করে এমন কোনও নলযোগ্য টাইপের জন্য? ঘোষণা - হয় null

কেন এই ঘটনা:

  • int?টাইপ নুলাবল <টি> (যেখানে টি রয়েছে int), একটি স্ট্রাক্টের জন্য সিনট্যাকটিক চিনি । ( রেফারেন্স )
  • এই Nullable<T>ধরণের একটি বোল হ্যাশভ্যালু সদস্য রয়েছে, যা যখন উদাহরণটিকে " মানের মতো" কাজ করে falsemakes বিশেষ করে, Nullable <টি> .Equals পদ্ধতি ফিরে যাওয়ার উপেক্ষা করা হয় যখন একটি সঙ্গে প্রকৃত সঙ্গে তুলনা করা হয় মান।Nullable<T>nulltrueNullable<T>HasValue == falsenull
  • থেকে C # এর ভাষা নির্দিষ্টকরণ 11.3.4 , একটি struct উদাহরণস্বরূপ প্রাথমিক ডিফল্ট মান যে struct মান টাইপ ক্ষেত্র তাদের ডিফল্ট মানে সেট সব, এবং যে struct এর রেফারেন্স টাইপ ক্ষেত্র সেট সব হল null
  • boolসি # তে পরিবর্তকের ডিফল্ট মান হ'ল false ( রেফারেন্স )। সুতরাং, HasValueএকটি ডিফল্ট Nullable<T>উদাহরণের সম্পত্তি হ'ল false; যার Nullable<T>ফলস্বরূপ সেই দৃষ্টান্তটি নিজের মতো করে তোলে null

আমি যখন থেকে একটি ঘোষণা পরিবর্তন int? x = null;করতে int? x;, আমি কম্পাইলার এরর পেতে আরও কোডে নিচে: "নিয়োগমুক্র স্থানীয় পরিবর্তনশীল x ব্যবহারের"।
জন চয়ন

4
@ জনপিক এটি একটি সি # সংকলক বৈশিষ্ট্য যা আপনার কাছ থেকে কোনও ভেরিয়েবলটি ব্যবহারের আগে "ভুলে যাওয়া" শুরু করতে পারে এমন বাগগুলি প্রতিরোধ করার উদ্দেশ্যে তৈরি করা হয়েছে। এমন একটি পরিস্থিতি যেখানে আপনি একটি অবিচ্ছিন্ন ব্যবহারের মুখোমুখি হতে পারেন ? এটি যখন ক্লাস সদস্যের পরিবর্তনশীল হয়। এখানে উভয়ের উদাহরণ: ব্লগস.এমএসডিএন.মাইক্রোসফট.আবিনাবা
জন স্নাইডার

তাহলে মূলত এই জায়গাটি কি আপনার টেক ব্লগ? আপনি এমন প্রশ্ন জিজ্ঞাসা করেছেন যার জন্য উত্তর পাওয়ার জন্য আপনার কোড চালানো দরকার, তারপরে একই মুহুর্তে নিজেই প্রশ্নের উত্তর দিন।
GôTô

4
@ জোনস্কনিডারের মেলা যথেষ্ট, আমার তখন খারাপ
GôTô

বনাম এর কম্পাইলার ইঙ্গিতটি / সতর্কবার্তা বিভ্রান্তিকর হয়: Field 'id' is never assigned to, and will always have its default value 0। অদ্ভুত তাই না?
হেন্ডি ইরওয়ান

32

আমি অ্যার মানগুলি Nullable<T>.GetValueOrDefault()ব্যবহার করে এমন গণিতের গণনাগুলির সাথে কাজ করার সময় যে পদ্ধতিটি বিশেষত কার্যকর তা ভাগ করে নেওয়া গুরুত্বপূর্ণ বলে মনে করি । অনেক সময় আছে যখন আপনার সম্পত্তি পরীক্ষা করতে হবে না এবং আপনি কেবল পরিবর্তে ব্যবহার করতে পারেন ।Nullable<int>int?HasValueGetValueOrDefault()

var defaultValueOfNullableInt = default(int?);
Console.WriteLine("defaultValueOfNullableInt == {0}", (defaultValueOfNullableInt == null) ? "null" : defaultValueOfNullableInt.ToString());

var defaultValueOfInt = default(int);
Console.WriteLine("defaultValueOfInt == {0}", defaultValueOfInt);

Console.WriteLine("defaultValueOfNullableInt.GetValueOrDefault == {0}", defaultValueOfNullableInt.GetValueOrDefault());

কমান্ড লাইন উপরে কাজ করে কোড দেখাচ্ছে


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