PDA

View Full Version : مقدار string از یک enum



Mrs.Net
یک شنبه 08 مهر 1386, 12:31 عصر
چجوری میتونم یک enum تعریف کنم که به عنوان مثال برای myenum.Blue مقدار 70 به من بده؟

hassan razavi
یک شنبه 08 مهر 1386, 12:40 عصر
اینطوری :


public enum myenum
{
Blue=70,
Red=100
}
int x =(int) myenum.Blue;

Mrs.Net
سه شنبه 10 مهر 1386, 00:28 صبح
فقط این راهش هست؟

hdv212
سه شنبه 10 مهر 1386, 01:04 صبح
فقط این راهش هست؟
منظورت چیه ؟ خب تعریف و استفاده از enum همینی هست که دوستمون برات نوشت.

hassan razavi
سه شنبه 10 مهر 1386, 10:39 صبح
اگه می خواهید از Enum استفاده کنید ، روش تعریف و استفادش همینه.
اگه منظورتون راه حلهای دیگه هست ، بیشتر توضیح بدید تا بتونیم پیشتهاد بدیم

Mrs.Net
پنج شنبه 03 آبان 1386, 10:59 صبح
منظورم این بود که یک مقدار string بدست بیارم
مثلا برای پارامتر Blue مقدار A بدست بیارم

hassan razavi
پنج شنبه 03 آبان 1386, 13:46 عصر
می تونید مقدار کد اسکیش رو قرار بدید و بعد آنرو به Char تبدیل کنید

اَرژنگ
جمعه 04 آبان 1386, 17:56 عصر
منظورم این بود که یک مقدار string بدست بیارم
مثلا برای پارامتر Blue مقدار A بدست بیارم
اگر میخواهید رنگها را به کد هکسشان تبدیل کنید روشهایه دیگری هست.
هدف از ینکار چیه؟ مشکلی ه میخواهید حل کنید را هم بگید.

Mrs.Net
جمعه 04 آبان 1386, 23:49 عصر
اون یک حرف مثال بود
من یک سری مقادیر استاندارد تو برنامه دارم
مثلا
bbbbb : buyer
sssss : seller
و چندتا کلمه دیگه
حالا میخوام یجا تو برنامه ام اینارو تعریف کنم و تو توابعم مثل enum با انتخا توضیح اون کلمه استرینگ قرار بگیره

اَرژنگ
شنبه 05 آبان 1386, 03:48 صبح
اون یک حرف مثال بود
من یک سری مقادیر استاندارد تو برنامه دارم
مثلا
bbbbb : buyer
sssss : seller
و چندتا کلمه دیگه
حالا میخوام یجا تو برنامه ام اینارو تعریف کنم و تو توابعم مثل enum با انتخا توضیح اون کلمه استرینگ قرار بگیره
برایه اینکار استفاده از داتابیس بهتر نیست؟
استفاده از enum معمولا برایه منطق برنامه است نه برایه نشان دادن اطلاعات .

hassan razavi
شنبه 05 آبان 1386, 15:51 عصر
منهم تا حالا ندیدم که برا چنین منظورهایی از enum استفاده کنند. فکر نمیکنم مورد شما با استفاده از enum حل بشه. بهتره از روشهای دیگری مثل structure و یا اگه اطلاعات هم زیاد هست ، همینطور که دوستمون گفت از Database استفاده کنید

mehdi.mousavi
شنبه 05 آبان 1386, 20:06 عصر
اون یک حرف مثال بود
من یک سری مقادیر استاندارد تو برنامه دارم
مثلا
bbbbb : buyer
sssss : seller
و چندتا کلمه دیگه
حالا میخوام یجا تو برنامه ام اینارو تعریف کنم و تو توابعم مثل enum با انتخا توضیح اون کلمه استرینگ قرار بگیره

سلام.
اگر اینها مقادیر ثابتی هستن و تغییر نخواهند کرد در اونصورت یه Enum تعریف کنید و با استفاده از DescriptionAttribute اونها رو Decorate کنید. به این ترتیب میتونید به هر آیتم نامی تخصیص بدین و در هنگام نیاز ازون نام استفاده کنید. بعنوان مثال:



public enum Item
{
[DescriptionAttribute("Buys an item")]
Buyer,

[DescriptionAttribute("Sells an item")]
Seller
}

Mrs.Net
شنبه 05 آبان 1386, 22:35 عصر
اینها حداکثر 6مورد ثابت هستند و اصلا در سطح استفاده در دیتابیس نیستند!

آقای مهدی چجوری از این enum استفاده میشه؟
ممنون

mehdi.mousavi
یک شنبه 06 آبان 1386, 10:34 صبح
اینها حداکثر 6مورد ثابت هستند و اصلا در سطح استفاده در دیتابیس نیستند!

آقای مهدی چجوری از این enum استفاده میشه؟
ممنون


به سادگی. کافی هستش تابع زیر و به برنامه اضافه کنید:



public String GetDesc(Enum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attrb = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribut e), false);

return (attrb.Length > 0) ? attrb[0].Description : value.ToString();
}
و سپس برای استفاده،


String s = GetDesc(Item.Buyer);به این ترتیب Description آیتم Buyer به شما برمیگیرده. فقط فراموش نکنید که این خط رو هم به کد اضافه کنید:


using System.Reflection;

البته برخی از افراد ترجیح میدن برای اینکار از Type Converter ها استفاده کنن تا از Reflection.

اَرژنگ
دوشنبه 07 آبان 1386, 11:51 صبح
اینها حداکثر 6مورد ثابت هستند و اصلا در سطح استفاده در دیتابیس نیستند!

استفاده از NameValueCollection و یا یک روش شبیهش درستر نیست؟
برایه مثال به http://msdn2.microsoft.com/en-us/library/system.collections.specialized.namevaluecollection .aspx
یک نگاه بندازید.
استفاده از enum برایه اینکار به نظر صحیح نمیاد.
روش آقا مهدی برایه استفاده از enum جالبه.

Mrs.Net
یک شنبه 04 آذر 1386, 10:59 صبح
خوب هنوز نتونستم اون کاری که میخوام انجام بدم. یه مثال میزنم:
برای مشخص کردن وضعیت یک کتاب
من یک فیلد status دارم که حروف t, u, v, w داخل اون قرار میگیره به ترتیب برای
فروخته شده - خریداری شده - امانتی - بدون موجودی
میخوام تو برنامه به این شکل تعریف کنم(درست مثل NameValueCollection که ارژنگ گفتند):


("sold","t")
("bought","u")
("award","v")
("Empty","w")

حالا یک تابع دارم که ورودی میگیره: شماره کتاب و وضعیت
میخوام وقتی وضعیت میگیره. مثل enum باز بشه و sold, bought, award, empty نشون بده و من انتخاب کنم. و موقعی که خواست تو بانک بریزه از value اینها یعنی t,u,v,w استفاده کنه
فکر کنم همه چیزو گفتم
اینکار خیلی جالب هست بنظر خودم
ممنون

اَرژنگ
یک شنبه 04 آذر 1386, 17:31 عصر
من هنوز توصیه میکنم که اینکار را با استفاده از یک جدول در داتبیس انجام بشه، ولی این هم یک مثال برایه انجام این کار: (بازهم توصیه میکنم که از یک جدول LookUp برایه اینکار استفاده کنید)

Mrs.Net
یک شنبه 04 آذر 1386, 19:47 عصر
آقای ارژنگ به این کد نگاه کنید:


classClass1
{
publicenumMyValues
{
Sold= 1,
Bought=2
}
publicvoid SetStatus(MyValues sts, int book)
{
}
}
classClass2
{
privatevoid SellBooks(int book)
{
Class1 cls = newClass1();
cls.SetStatus(Class1.MyValues.
}
}

اگه این کد بنویسید و ادامه این خط شروع کنید به نوشتن:

cls.SetStatus(Class1.MyValues
میبینید که visual تمام مقادیر enum رو باز میکنه تا انتخاب کنید.
من دقیقا همچین چیزی میخوام و چون enum مقدار عددی فقط میگیه نمیتونم با enum انجام بدم.
خیلی ممنون


(بازهم توصیه میکنم که از یک جدول LookUp برایه اینکار استفاده کنید)ممنون اما بهتر نیست بخاطر یه همچین اطلاعات کم و ثابت از بانک استفاده نکنم ؟!

اَرژنگ
دوشنبه 05 آذر 1386, 05:03 صبح
اما بهتر نیست بخاطر یه همچین اطلاعات کم و ثابت از بانک استفاده نکنم ؟!
جایه اطلاعات در بانک است. باور داشتن اینکه یک چیزی در برنامه نویسی ثابت خواهد ماند یکمی سخته

Mrs.Net
دوشنبه 05 آذر 1386, 21:11 عصر
جایه اطلاعات در بانک است. باور داشتن اینکه یک چیزی در برنامه نویسی ثابت خواهد ماند یکمی سخته آقای ارژنگ. شما برای مشخص کردن بدهکار یا بستانکاری یک شخص از چه کلیدی استفاده میکنید؟...
وقتی برای فقط برنامه نویس کلیدهایی وجوددارند برای نشون دادن وضعیت اون رکورد و فقط داخل کدنویسی استفاده میشه و هیچوقت تغییر نمیکنند بازم باید داخل بانک باشه؟
اصلا بانک بودن یا تو سورس بودن مهم نیست. چون سوالم یه چیز دیگه هست ;)
آیا میشه کلاسی از نوع enum درست کرد؟ یا override کرد؟

اَرژنگ
سه شنبه 06 آذر 1386, 11:05 صبح
آقای ارژنگ به این کد نگاه کنید:


classClass1
{
publicenumMyValues
{
Sold= 1,
Bought=2
}
publicvoid SetStatus(MyValues sts, int book)
{
}
}
classClass2
{
privatevoid SellBooks(int book)
{
Class1 cls = newClass1();
cls.SetStatus(Class1.MyValues.
}
}

اگه این کد بنویسید و ادامه این خط شروع کنید به نوشتن:

cls.SetStatus(Class1.MyValues
میبینید که visual تمام مقادیر enum رو باز میکنه تا انتخاب کنید.
من دقیقا همچین چیزی میخوام و چون enum مقدار عددی فقط میگیه نمیتونم با enum انجام بدم.

چه کاری را نمیتوانید انجام بدید؟
منظورتان از اینکه فقط عددی میگیره چیه؟
مثال کدی را که میخواهید انجام بدید و کار نمیکند را بدید، شاید بفهمم که در پی چی میگردید.

اَرژنگ
سه شنبه 06 آذر 1386, 11:13 صبح
آقای ارژنگ. شما برای مشخص کردن بدهکار یا بستانکاری یک شخص از چه کلیدی استفاده میکنید؟...


از هیچ کلیدی!، بدهکاری و یا بستانکاری یک شخص بستگی به مقدار داره، اگر مقدار از صفر بیشتر و یا کمتر بود معلومه که چی هست.



وقتی برای فقط برنامه نویس کلیدهایی وجوددارند برای نشون دادن وضعیت اون رکورد و فقط داخل کدنویسی استفاده میشه و هیچوقت تغییر نمیکنند بازم باید داخل بانک باشه؟



بستگی دارد. یک مثال بدید که سخت کد کردن نیاز داشته باشد، مثلان تعداد روزهایه هفته و یا تعداد ساعتها در یک روز که همیشه ثابتند و به منطق داده‌هایه برنامه ما ربطی ندارند ، البته که داخل بانک نمیگذاریمشان (مگر اینکه روزهایه هفته را به زبانهایه خاص بخواهیم).




اصلا بانک بودن یا تو سورس بودن مهم نیست. چون سوالم یه چیز دیگه هست ;)
آیا میشه کلاسی از نوع enum درست کرد؟ یا override کرد؟

منظورتان را نمیفهمم، برایه چه کاری، چرا حتما باید enum باشد؟ یک شبه کد شبیه به اآنجیزی که دلتان میخواد ببینید بدید شاید یک سرنخ بیاد دستم که دنبال چی میگردید.