কোনও প্রকারের পরে প্রশ্ন চিহ্নের উদ্দেশ্য কী (উদাহরণস্বরূপ: int? মাই ভেরিয়েবল)?


433

সাধারণত প্রশ্ন চিহ্নের প্রধান ব্যবহার শর্তাধীন x ? "yes" : "no",।

তবে আমি এর জন্য অন্য ব্যবহার দেখেছি তবে ?উদাহরণস্বরূপ অপারেটরের এই ব্যবহারের কোনও ব্যাখ্যা খুঁজে পাচ্ছি না ।

public int? myProperty
{
   get;
   set;
}

উত্তর:


437

এর অর্থ হল যে প্রশ্নের মান টাইপ হ'ল এক প্রকার প্রকারের

অবিচ্ছেদ্য প্রকারগুলি হ'ল সিস্টেমের উদাহরণ ul ননবল স্ট্রাক্ট। একটি nullable প্রকারটি তার অন্তর্নিহিত মান প্রকারের জন্য মানগুলির সঠিক ব্যাপ্তি উপস্থাপন করতে পারে, এবং অতিরিক্ত নাল মানকেও উপস্থাপন করতে পারে। উদাহরণস্বরূপ, একটি Nullable<Int32>, উচ্চারিত "ইনট 32 এর ন্যারেবল", -2147483648 থেকে 2147483647 থেকে কোনও মান নির্ধারিত হতে পারে, বা এটি নাল মান নির্ধারণ করতে পারে। একটি Nullable<bool>মান, সত্য, মিথ্যা বা নাল নির্ধারণ করা যেতে পারে। সংখ্যাসূচক এবং বুলিয়ান প্রকারগুলিকে নাল নির্ধারণের ক্ষমতাটি বিশেষত কার্যকর যখন আপনি ডাটাবেসগুলি এবং অন্যান্য ডেটা ধরণের সাথে কাজ করছেন যখন কোনও উপাদান নির্ধারিত হয় যা কোনও মান নির্ধারিত হয় না। উদাহরণস্বরূপ, একটি ডেটাবেজে বুলিয়ান ক্ষেত্র মানগুলি সত্য বা মিথ্যা সঞ্চয় করতে পারে বা এটি অপরিজ্ঞাত হতে পারে।

class NullableExample
{
  static void Main()
  {
      int? num = null;

      // Is the HasValue property true?
      if (num.HasValue)
      {
          System.Console.WriteLine("num = " + num.Value);
      }
      else
      {
          System.Console.WriteLine("num = Null");
      }

      // y is set to zero
      int y = num.GetValueOrDefault();

      // num.Value throws an InvalidOperationException if num.HasValue is false
      try
      {
          y = num.Value;
      }
      catch (System.InvalidOperationException e)
      {
          System.Console.WriteLine(e.Message);
      }
  }
}

3
কাঠামো জন্য ব্যবহৃত। এটি ক্লাসগুলির জন্য আসলে কার্যকর বলে মনে করবেন না।
MonsieurDart

8
@MonsieurDart - তাই বলে উত্তর বলেন, "মান প্রকার"
শন

3
@ অ্যান্টাইনডাহান - মানগুলির ধরণগুলিতে সংক্ষিপ্ত প্রকরণগুলি যেমন সংজ্ঞাবিহীন হয় তেমন নয় n আমি মনে করি আপনি জাভা সম্পর্কে চিন্তা করছেন যেখানে উদাহরণস্বরূপ একটি intপ্রকার এবং একই Integerশ্রেণি আছে।
শান

2
অবিচ্ছিন্ন প্রকারের জন্য আরও সাম্প্রতিক (2015) ডকুমেন্টেশন এখানে
ডাইনোসর


118

এটি একটি সংক্ষিপ্ত হাত Nullable<int>Nullable<T>মান ধরণের সেট করতে সেট করতে ব্যবহৃত হয় null। মানের ধরণগুলি সাধারণত নাল হতে পারে না


3
শর্টহ্যান্ড শব্দটি ব্যবহারের জন্য প্লাস ওয়ান, প্রেটি সোজা এগিয়ে!
হরি

3
দ্বিতীয় বাক্যটি আমাকে বিভ্রান্ত করে। "পারবেন না" বলতে কী বোঝ? সংকলক স্তরে বা অ্যাপ্লিকেশন প্রসঙ্গে।
সমস্যাসংক্রান্ত

5
@ সংজ্ঞা অনুসারে প্রব্লেমোফিকার, value typesবাতিল হতে পারে না। যদি আপনি কোনও মান নির্দিষ্ট করে না দিয়ে কোনও int বা বুল (যা মান ধরণের) ঘোষণা করেন তবে তাদের মানগুলি (যথাক্রমে 0 এবং মিথ্যা, যথাক্রমে) থাকবে। তারা বাতিল হবে না। নির্দিষ্ট কাউকে না দেওয়া reference types, এই ধরনের বস্তু বা MyClass হিসাবে, অন্যদিকে, নাল হতে হবে। আপনি মান ধরণের এবং রেফারেন্স ধরণের মধ্যে পার্থক্যটি পড়তে চাইতে পারেন।
ক্লাউস বিস্কোভ পেদারসেন

ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ. আমি এখন বুঝতে পেরেছি.
সমস্যাসংখ্যক

62

ভিতরে

x ? "yes" : "no"

? যদি একটি বাক্য ঘোষণা করে । এখানে: x বুলিয়ান অবস্থার প্রতিনিধিত্ব করে; এর আগের অংশ : হয় তারপর বাক্য এবং অংশ পরে অন্য বাক্য।

উদাহরণস্বরূপ,

int?

? একটি নালযোগ্য টাইপ ঘোষণা করে এবং এর অর্থ হ'ল টাইপটির আগে এটির নাল মান হতে পারে।


9
আমি 'এর মধ্যে কোন সম্পর্ক দেখতে পাচ্ছি না?' নাল-সক্ষম টাইপ এবং একটি ত্রৈমাসিক অভিব্যক্তি ঘোষণা করা। আপনার উত্তর স্যার ডাউন ভোট।
গাস ক্রফোর্ড

36
আমি গুসের উপরের মন্তব্যটির সাথে একমত নই। প্রশ্নটি দেখায় যে ত্রৈমাসিক প্রকাশের সাথে একটি সম্ভাব্য বিভ্রান্তি রয়েছে। এই উত্তরটি এই সমস্যার সমাধান করে।
মারিও লেভেস্ক

আপনি কোথায় নাল তুলনা এই ধরনের ব্যবহার করবেন? কোনও রিটার্নের অভ্যন্তরে মনে হচ্ছে এটি অনুমোদিত নয়। return value ? value : "isNull";আমাকে বলছে যে এটি string valueবিলে রূপান্তরযোগ্য নয়।
সি

আমি অবশ্যই বলব এটি একটি খুব বিশৃঙ্খল উত্তর, বিশেষত যখন এই প্রশ্নের অন্যদের সাথে তুলনা করা হয় .. -১
ফাস্টট্র্যাক

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। যেহেতু এটি পরিষ্কার এবং সুনির্দিষ্ট। +1
জেপি ডলোকানোগ

49

অবিচ্ছিন্ন প্রকার

অবিচ্ছেদ্য প্রকারগুলি হ'ল সিস্টেমের উদাহরণ ul ননবল স্ট্রাক্ট। একটি নালযোগ্য টাইপ তার অন্তর্নিহিত মান প্রকারের জন্য মানগুলির সাধারণ পরিসীমা এবং অতিরিক্ত নাল মানের প্রতিনিধিত্ব করতে পারে । উদাহরণস্বরূপ, একটি [ Nullable<Int32>], উচ্চারিত "ইন্টার 32 এর ন্যারেবল", -2147483648 থেকে 2147483647 থেকে কোনও মান নির্ধারিত হতে পারে, বা এটি নাল মান নির্ধারণ করতে পারে। এ [ Nullable<bool>] মানগুলি সত্য বা মিথ্যা, বা বাতিল হয়ে যায়। ডাটাবেস এবং অন্যান্য ডেটা টাইপগুলির সাথে যখন কোনও মূল্য নির্ধারিত নাও হতে পারে এমন উপাদানগুলির সাথে ডিল করার সময় অঙ্ক এবং বুলিয়ান প্রকারভেদে নাল নির্ধারণ করার ক্ষমতা বিশেষভাবে কার্যকর। উদাহরণস্বরূপ, একটি ডেটাবেজে বুলিয়ান ক্ষেত্র মানগুলি সত্য বা মিথ্যা সঞ্চয় করতে পারে বা এটি অপরিজ্ঞাত হতে পারে।


11

এটি ঘোষিত করে যে প্রকারটি প্রবণতাযুক্ত।


2
প্রশ্নকারীদের নমুনা দেওয়া আপনার প্রথম এন্ট্রিটি বোঝায় না।
বাইনারি ওয়ারিয়ার

উপরের সমস্ত গভীরতার উত্তর যখন রেটিং সম্পর্কে ঠিক কৌতূহল :)
নাগা

6

ব্যবহারিক ব্যবহার:

public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
  if (value == null)
  {
    return "bad value";
  }

  return someFunctionThatHandlesIntAndReturnsString(value);
}

1
প্রশ্নটি জিজ্ঞাসা করার 5 বছর পরেও ওপি এখনও সক্রিয় রয়েছে, উত্তর আর প্রাসঙ্গিক হতে পারে না।
স্ট্রবেরি

10
আমার কাছে এটি 3 ঘন্টা আগে ছিল :-)
এজেবাউর

3

উপরের উত্তরগুলিতে যোগ করতে এখানে একটি কোড নমুনা

struct Test
{
    int something;
}
struct NullableTest
{
    int something;
}
class Example
{
    public void Demo()
    {
        Test t = new Test();
        t = null;

        NullableTest? t2 = new NullableTest();
        t2 = null;
    }
}

এটি সংকলনের ত্রুটি দেয়:

ত্রুটি 12 নালটিকে 'টেস্টে' রূপান্তর করতে পারে না কারণ এটি একটি অ-অযোগ্য মান ধরণের

লক্ষ্য করুন নুলবেল টেস্টের জন্য কোনও সংকলন ত্রুটি নেই। (টি -2 ঘোষণায়? নোট করুন)


2

int?জন্য সাধারণভাবে সংক্ষেপে হয় Nullable<int>। দুটি রূপই বিনিময়যোগ্য।

Nullable<T>এটি এমন একটি অপারেটর যা আপনি Tএটি মান্য করার জন্য কোনও মান ধরণের সাথে ব্যবহার করতে পারেন null

আপনি এটা জানেন না যদি: মান ধরনের ধরনের যে মান গ্রহণ করে হয় int, bool, charইত্যাদি ...

তারা মানগুলির রেফারেন্স গ্রহণ করতে পারে না: আপনি কোনও সংকলন-সময় ত্রুটি উত্পন্ন করবেন যদি আপনি তাদের রেফারেন্স প্রকারেরnull বিপরীতে, একটি স্পষ্ট করে দেন যা স্পষ্টতই এটি গ্রহণ করতে পারে।

কেন আপনি এটি প্রয়োজন হবে? কারণ কখনও কখনও আপনার মান ধরণের ভেরিয়েবলগুলি এমন কোনও কিছু দ্বারা খুব ভাল কাজ করে না এমন কোনও ফেরৎ পাওয়া নাল রেফারেন্স পেতে পারে, যেমন কোনও ডাটাবেস থেকে অনুপস্থিত বা অপরিজ্ঞাত ভেরিয়েবল ফিরে আসে।

আমি আপনাকে মাইক্রোসফ্ট ডকুমেন্টেশন পড়ার পরামর্শ দিচ্ছি কারণ এটি বিষয়টিকে বেশ ভালভাবে কভার করে।

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