এনাম ভেরিয়েবলের ডিফল্ট মান কী?


240

একটি এনাম ভেরিয়েবল, কেউ কি জানেন যে এটি সর্বদা প্রথম উপাদানটির ডিফল্ট হয়?


1
কোনও ডিফল্ট এনামটি পছন্দ করার ক্ষেত্রে ব্যবহারের ক্ষেত্রে একটি বিবেচনা হ'ল একটি নলযোগ্য ভেরিয়েবল ব্যবহার করা। যখন কোনও নাল প্রাপ্ত হয়, কোডের সঠিক অংশে এটি ডিফল্ট ভাষায় অনুবাদ করা যায় এবং এই ডিফল্টটিকে বাকী কোডে (এটি কেবল একটি নাল বরাবর যায়) জানা উচিত নয়।
এরিক

উত্তর:


381

এটি গণনার সদস্য যেটিই প্রতিনিধিত্ব করে 0। বিশেষ করে ডকুমেন্টেশন থেকে :

ডিফল্ট মান enum Eহ'ল এক্সপ্রেশন দ্বারা উত্পাদিত মান (E)0

উদাহরণ হিসাবে, নিম্নলিখিত এনাম নিন:

enum E
{
    Foo, Bar, Baz, Quux
}

ডিফল্ট মানগুলিকে ওভাররাইড না করে, মুদ্রণ default(E)ফিরে আসে Fooকারণ এটি প্রথমটি হয়।

যাইহোক, এনামের ক্ষেত্রে প্রথম সদস্য প্রতিনিধিত্ব করেন এমনটি সর্বদা হয় না0 । উদাহরণস্বরূপ, আপনি যদি এটি করেন:

enum F
{
    // Give each element a custom value
    Foo = 1, Bar = 2, Baz = 3, Quux = 0
}

মুদ্রণ default(F)আপনাকে দেবে Quux, না Foo

এনামের উপাদানগুলির মধ্যে যদি কোনওটিরই মিল Gনা থাকে 0:

enum G
{
    Foo = 1, Bar = 2, Baz = 3, Quux = 4
}

default(G)আক্ষরিক অর্থে ফিরে আসে 0, যদিও এর ধরণটি এখনও অব্যাহত রয়েছে G(উপরের ডক্স অনুসারে, প্রদত্ত এনাম টাইপের জন্য একটি কাস্ট)।


1
ধন্যবাদ, এবং এনএমগুলির পরিবর্তে ইন্টের পরিবর্তে চরের সাথে সংজ্ঞায়িত এনামগুলি সম্পর্কে। উদাহরণস্বরূপ এনাম স্ট্যাটাস {অ্যাক্টিভ = 'এ', ইনঅ্যাকটিভ = 'আই'}
ফার্নান্দো টরেস

3
@Fernando টরেস: এখনও 0, যদি না আপনার enum মান অনুরূপ এক '\0'বা default(char), যা থেকে অত্যন্ত অসম্ভাব্য default(char)NUL চরিত্র যা গৃহস্থালির কাজ কোড 0. সাথে সঙ্গতিপূর্ণ
BoltClock

আমি (? ভুলক্রমে) অধিকৃত ব্যবহার করে DefaultValueঅ্যাট্রিবিউট - ভালো কিছু System.ComponentModel.DefaultValue(MyEnum.Blah)--would আচরণকে সংশোধন default(MyEnum)কিন্তু এটি এখনও উৎপাদ 0. একটা জন্য একটি বিমূর্ততা তৈরি করতে কোন উপায় আছে কি enumতার ডিফল্ট মান আশেপাশে আছেন?
ক্রেগ সিলভার

2
@ ক্রেইগ সিলভার: ডিফল্টভ্যালিউ বৈশিষ্ট্য বৈশিষ্ট্যের ক্ষেত্রে প্রযোজ্য - একটি এনাম একটি প্রকার এবং এর মতো, ডিফল্টভ্যালু পুরোপুরি এনামের ধরণের উপর প্রভাব ফেলেনি। আমি মনে করি আপনি প্রকারের একটি এক্সটেনশন পদ্ধতিতে এটি ঘিরে কাজ করতে পারেন তবে আপনি কেবল 0 এর জন্য পরীক্ষা করা ভাল
বোল্টক্লক

11

আমি মনে করি একটি এনামের মানগুলির ক্রমের উপর নির্ভর করা এবং প্রথমটি সর্বদা ডিফল্ট বলে ধরে নেওয়া বেশ বিপজ্জনক আপনি যদি ডিফল্ট মান রক্ষা করতে উদ্বিগ্ন হন তবে এটি ভাল অনুশীলন হবে।

enum E
{
    Foo = 0, Bar, Baz, Quux
}

অন্যথায়, এটি যা লাগে তা হ'ল অর্ডারটির অযত্নিক অশোধক এবং আপনার সম্পূর্ণ ভিন্ন ডিফল্ট।


3
দুঃখিত আপনি ভুল। আমি একই ধরেছি তবে আপনি যদি উভয় Fooপরে রাখেন এবং 0 এর মান হবে এবং ফিরে আসবে । এটি এত নির্বোধ এবং পাল্টা প্রতিরোধী তবে এটি সত্য :(BarFooBarE.Foo == E.Bartrue
পাভসিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.