2013-06-19 4 views
1

Вот моя конечная цель: я хочу иметь способ вывода имен инструментов на основе любого целого числа, зарегистрированного в программе. Например, если целые числа, 1001, 1002 и 1003, найденные программой, программа сообщит пользователю, что были найдены Инструменты 1, Инструмент 2 и Инструмент 3.Должен ли я использовать класс Enum или Lookup in C#

Я получил это для работы, используя простой класс перечисления, где все «инструменты» нумеруются и соответствуют правильному целому числу. Я могу даже выводить перечисление как имя, хотя я хотел бы выводить строку, предпочтительно такую, которую можно легко редактировать без необходимости слишком сильно изменять всю программу. Как и было бы здорово, если бы я мог запрограммировать все это как Инструмент 1, Инструмент 3 и Инструмент 7 сейчас, а затем вернуться и просто изменить строки, когда я действительно знаю инструменты, которые я использую.

Я также уже пытался использовать DescriptionAttribute с этим перечислением, но даже с помощью нескольких вопросов я не смог понять, что Enum. Я мог бы сделать либо или, но не оба, просто.

Так что это заставило меня задаться вопросом, был ли лучший способ, которым я мог бы справиться со всем этим, кроме использования класса Enum, который, как я слышал, не так полезен в C#. Я просто хочу знать любые предложения о том, как я могу это сделать с помощью класса enum или других методов в C#, которые я могу использовать для достижения этого.

Просто дайте мне знать, если мне нужно разделить мой рабочий код, который у меня уже есть. Благодаря!

+1

Есть ли что-то, что говорит против словаря 'и соответствующего' Tool.ToString() '? – Vlad

+0

До тех пор, пока вы не возражаете перекомпилировать всякий раз, когда меняются описания, 'DescriptionAttribute' должно быть достаточно (какой код не работал для вас?). Но, откровенно говоря, для вас было бы гораздо меньше хлопот, если бы вы использовали «Словарь », и если только целые числа, о которых вы говорите, имеют одинаковое «постоянное» качество, например, GUID имеет, перечисление не имеет большого смысла. – Jon

+0

@ Vlad не то, что я знаю.Я забыл упомянуть, что считаю себя новым для C#, поэтому я готов слушать то, что кто-то думает о моей работе, и, по крайней мере, попробовать. Сначала я пошел с Enum, потому что выглядел многообещающим. – VarnerBeast14

ответ

7

Я бы рекомендовал иметь класс инструмента с несколькими свойствами;

public class Tool 
{ 
    public string Name { get; set; } 
    public string Description { get; set; } 
} 

Затем в коде, который имеет дело с этим я хотел бы использовать Dictionary<int, Tool>. Тогда, если вы хотите сказать, описание для инструмента 1001 вы бы просто сделать:

Console.WriteLine(myTools[1001].Description); 

Конечно, вы могли бы просто использовать Dictionary<int, string> но вы, вероятно, обнаружите позже, что вы хотите больше данных, связанных с инструментом, так создание класса имеет больше смысла.

+0

@jsmith может быть, моя база кода использует строчные буквы для всех свойств и подчеркивания для обозначения частного поля: P В любом случае, я вас успокоил. – evanmcdonnal

+0

Это выглядит хорошо. Я попытаюсь что-то предпринять и вернусь сюда, когда закончу. Это выглядит многообещающе, поэтому спасибо за ответ независимо. – VarnerBeast14

+0

Я использую этот метод, но где я действительно ввожу названия инструмента? В классе по методу словаря или в другом месте? – VarnerBeast14

1

Звучит как хороший случай для примера Dictionary

:

var tools = new Dictionary<int, string> 
{ 
    {1001, "Tool 1"}, 
    {1002, "Tool 2"}, 
    {1003, "Tool 3"}, 
}; 

string tool1Name = tools[1001]; 
//toolName == "Tool 1" 
0

Перечисления очень полезны. Для них есть время и место, и в вашем примере вы действительно не должны их использовать. Они представляют собой постоянное значение строго типизированным образом и могут использоваться как flags, если вы их помечаете.

Для вашей ситуации класс будет работать.

public class ToolItem 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
    public override ToString() { //...Your logic } 
} 

Тогда вы можете использовать List<T>. Dictionary<TKey, TValue> и т. Д., Чтобы иметь ссылку на них и использовать LINQ для работы с коллекциями.

Смежные вопросы