এনাম কীভাবে নালায় সেট করবেন


192

আমার একটি এনাম আছে

string name;

public enum Color
{
  Red,
  Green,
  Yellow
}

এটি কীভাবে লোড-এ NULL এ সেট করবেন।

name = "";
Color color = null; //error

সম্পাদিত: আমার খারাপ, আমি এটি সঠিকভাবে ব্যাখ্যা করিনি। তবে nullable সম্পর্কিত সমস্ত উত্তর নির্ভুল। আমার পরিস্থিতি কী, যদি আমি নামের সাথে অন্যান্য উপাদানগুলির সাথে ক্লাসে এনামের জন্য / সেট করে রাখি তবে পৃষ্ঠা লোডে আমি ক্লাসটি আরম্ভ করব এবং মানগুলি বাতিল করতে চেষ্টা করব। এই দৃশ্যটি এখানে রয়েছে (কোডটি সি # তে রয়েছে):

namespace Testing
{
    public enum ValidColors
    {
        Red,
        Green,
        Yellow
    }

    public class EnumTest
    {
        private string name;
        private ValidColors myColor;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public ValidColors MyColor
        {
            get { return myColor; }
            set { myColor = value; }
        }

    }

    public partial class _Default : System.Web.UI.Page
    {       
        protected void Page_Load(object sender, EventArgs e)
        {
            EnumTest oEnumTest = new EnumTest();
            oEnumTest.Name = "";
            oEnumTest.MyColor = null; //???
        }
    }

}

তারপরে নীচের পরামর্শগুলি ব্যবহার করে আমি উপরের কোডটি এটিকে get এবং সেট পদ্ধতিতে কাজ করার জন্য পরিবর্তন করেছি। আমি শুধু "যোগ করা প্রয়োজন?" প্রাইভেট এনাম ভেরিয়েবল ঘোষণার সময় এনামটেষ্ট ক্লাসে এবং গেট / সেট পদ্ধতিতে:

public class EnumTest
{
    private string name;
    private ValidColors? myColor; //added "?" here in declaration and in get/set method

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public ValidColors? MyColor
    {
        get { return myColor; }
        set { myColor = value; }
    }

}

সুন্দর সব পরামর্শের জন্য ধন্যবাদ।


উত্তর:


371

আপনি "ব্যবহার করতে পারেন?" অপ্রয়োজনীয় প্রকারের জন্য অপারেটর।

public Color? myColor = null;

অথবা এনামগুলিতে FIRST মান থাকা (এনাম 0) ডিফল্ট মান হতে পারে এমন এনামগুলির জন্য মানক অনুশীলনটি ব্যবহার করুন। উদাহরণস্বরূপ রঙের কোনও ক্ষেত্রে নয়।

public Color myColor = Color.None;

বামে টাইপটি নির্দিষ্ট করা হওয়ার পরে @Equiman কে কাস্ট করার দরকার নেই, আপনি মূলত আমার উত্তরটির প্রথম অংশটি নকল করছেন যা ইতিমধ্যে স্বীকৃত।
রডনি এস ফোলে

7
এটি আমার প্রশ্নের উত্তর দিয়েছে: আপনি কি যুক্ত করতে পারেন? ' নামকরণ করতে হবে এটিকে nlalable করার জন্য?
ভাগ্যবানলিকে

যাঁরা ইতিমধ্যে তাদের ক্লাসে ঘোরাঘুরিযুক্ত প্রকারটি ঘোষণা করেছেন এবং এখানে এসেছেন: মাই কালার = (রঙ?) নাল;
স্টিফানজানসেন

পছন্দ করেছেন
রডনি এস ফোলে

সমস্যাটি তখন কী তা আমি জানি না, তবে আমার সংকলকের ক্ষেত্রে এটি errorsালাই না করা পর্যন্ত ত্রুটি দিয়েছে did
স্টিফানজানসেন

43

যদি এটি সি # হয় তবে এটি কাজ করবে না: এনামগুলি মান ধরণের, এবং তা হতে পারে না null

সাধারণ বিকল্পগুলি হ'ল একজন Noneসদস্য যুক্ত করা:

public enum Color
{
  None,
  Red,
  Green,
  Yellow
}

Color color = Color.None;

... বা ব্যবহারের জন্য Nullable:

Color? color = null;

24

আপনার পরিবর্তনশীল nlalable করুন। ভালো লেগেছে:

Color? color = null;

অথবা

Nullable<Color> color = null;

9

একটি এনুম সি # তে একটি "মান" টাইপ (যার অর্থ এনামটি যে কোনও মান হিসাবে সংরক্ষণ করা হয়, মেমরির কোনও স্থানের উল্লেখ হিসাবে নয় যেখানে মানটি নিজেই সঞ্চয় থাকে)। আপনি মূল্য প্রকারগুলি নালায় সেট করতে পারবেন না (যেহেতু নালটি কেবলমাত্র রেফারেন্স ধরণের জন্য ব্যবহৃত হয়)।

বলা হচ্ছে যে আপনি Nullable<T>শ্রেণীর অন্তর্নির্মিত ব্যবহার করতে পারেন যা মানের ধরণগুলি এমনভাবে মুড়িয়ে দেয় যা আপনি এগুলিকে বাতিল করতে পারেন, এটি যাচাই করুন HasValueএবং এটি আসল পাবেন Value। (এই দুটি জিনিসই Nullable<T>বস্তুগুলিতে।

name = "";
Nullable<Color> color = null; //This will work.

আপনি ব্যবহার করতে পারেন এমন একটি শর্টকাটও রয়েছে:

Color? color = null;

যে হিসাবে একই Nullable<Color>;


3

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

Color color = -1;

বা, আপনি 1 এ আপনার এনাম শুরু করতে এবং এটি শূন্যে সেট করতে পারেন। আপনি যদি এখনই রঙটি শূন্য হিসাবে সেট করেন তবে আপনি এটি "লাল" তে সেট করবেন কারণ আপনার এনামে লাল শূন্য।

সুতরাং,

enum Color {
red =1
blue,
green
}
//red is 1, blue is 2, green is 3
Color mycolour = 0;

0

স্পষ্টভাবে মান 0 None ধ্রুবক হিসাবে নির্ধারণ করা ভাল না ? কেন?

কারণ ডিফল্ট enumমান 0 এর সমান, যদি আপনি কল করবে default(Color)এটা প্রিন্ট হবে None

যেহেতু এটি প্রথম অবস্থানে রয়েছে, অন্য যে কোনও ধ্রুবকের কাছে আক্ষরিক মান 0 নির্ধারণের ফলে সেই আচরণটি পরিবর্তিত হবে, ঘটনার ক্রমও পরিবর্তিত হবে default(Color)( https://stackoverflow.com/a/4967673/8611327 )


-2
Color? color = null;

অথবা আপনি ব্যবহার করতে পারেন

Color? color = new Color?();

নাল অভ্যাস কাজ নির্ধারণ যেখানে উদাহরণস্বরূপ

color = x == 5 ? Color.Red : x == 9 ? Color.Black : null ; 

যাতে আপনি ব্যবহার করতে পারেন:

 color = x == 5 ? Color.Red : x == 9 ? Color.Black : new Color?(); 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.