2013-02-27 2 views
2

Я хочу знать, есть ли способ объявить перечисление с целыми числами. или если есть какая-то другая альтернатива, которую я мог бы использовать.перечисление литералов

Например:

enum panelSizes { 300, 305, 310, 315, ..., 50000} 
        [0] [1] [2] [3]  [940] 

мне нужно назначить какое-то ID для каждого размера, поэтому, когда пользователь вводит определенную ширину, должен быть в состоянии определить соответствующий cutSize ведьму хранится в другом Массив.

Это моя попытка ИЗБЫТАТЬ попытку прочитать файл excel в моей программе и сделать что-то вроде LOOKUP, чтобы идентифицировать определенную связанную информацию.

Пожалуйста, помогите

Заранее спасибо

+0

С линейными значениями, которые не нужны для словаря/enum, чтобы искать вещи, если Im здесь что-то не хватает. – Evelie

ответ

3

Поскольку ваш подход не позволяет имена так или иначе, использовать массив:

readonly int[] panelSizes = { 300, 305, 310, 315, ..., 50000}; 

, а затем, возможно, добавить перечисление индексировать:

enum panelSizeNames { a300, a305, a310, a315, ... , a50000 } // or better names 

получить

int size = panelSizes[panelSizeNames.a315]; 
+0

Я даже написал это в своих заметках .. Прошу прощения. Это прекрасно –

+0

Если представление 'int' значения enum используется как индекс массива, я думаю, что лучше явно указать значения перечисления:' enum panelSizeNames {a300 = 0, a305 = 1, ...} ' , Даже если это на самом деле не требуется на данный момент ('enum' составляет 0 по умолчанию), это лучше IMO, так как это позволяет легко изменить индекс значения panelSizes в целевом массиве. – ken2k

+0

Нумерация по умолчанию идеальна и исключает один источник ошибок. Чем меньше ручная работа, тем лучше. –

1

Как насчет словаря?

 Dictionary<int, int> dic = new Dictionary<int, int> 
     { 
      { 0, 300 }, 
      { 1, 305 }, 
      { 2, 310 } 
      .... 
     }; 

Обратите внимание, что если ключ является индексом от 0 до N, простой массив будет ОК тоже ...

+0

Я думаю, что int [] будет немного меньше усилий, поскольку я сравниваю пользовательский ввод данных от DataGrid с значениями int []. Тогда позиция позволит мне получить соответствующее значение, которое мне нужно, из другого массива, поскольку они находятся в одном и том же положении. Но, спасибо, я учусь изучать все, что могу. Я очень новичок в C# –

1

Используйте Dictionary<int,int>, загружаемый на старте с идентификатором и шириной в нем как ключ и ценность.

2

Для меня кажется, что вы захотите использовать алгоритм вместо поиска, чтобы получить правильное разрезание. Нет необходимости в словаре/enum/array, если ваши значения линейны.

int panelSize = 5000; 
    int index = (panelSize - 300)/5; 

и наоборот

int index = 940; 
    int panelSize = (index * 5) + 300; 
+0

Дело в том, что у меня на самом деле есть электронная таблица с соответствующим размером разреза каждого размера, количеством отверстий в зависимости от размера зазора и от того, подходит ли размер для установки. Поэтому я буду использовать ту же ссылку (позицию), чтобы получить всю эту информацию. –

+0

Но ваша таблица линеала? 300 | 0,305 | 1, 310 | 2 и т. Д. 5000 | 940? Правильно? Создание предоставленного мной алгоритма возвращает те же значения, что и ваша электронная таблица. – Evelie

0

Вот что я сделал:

Используя-структуру, я был в состоянии сравнить массив ввода в массив заселенной с размерами, а затем сохранить каждой позиции соответствующего размера в массиве «Идентичность». Теперь я мог бы легко написать методы возврата значений из других массивов в одних и тех же позициях ... (напоминающая электронную таблицу Lookup)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace PalisadeWorld 
{ 
//struct to store all the 'identities' of each panel size in an array 
struct ID 
    { 
     public int[] Identities; 
     public ID(int[] widths, int rows) 
     { 
      int[] allWidths = { 300, 305, 310, 315, 320, 325, 330, ..., 5000 }; 
      int i,j; 
      int[] Ids = new int[rows]; 

      for (i = 0; i < rows; i++) 
      { 
       for (j = 0; j < 941; j++) 
       { 
        if (widths[i] == allWidths[j]) 
        { 
         Ids[i] = j; 
         break; 
        } 
       } 
      } 
      this.Identities = Ids; 
     } 
     public override string ToString() 
     { 
      string data = String.Format("{0}", this.Identities); 
      return data; 
     } 
    } 

class LookUpSheet 
{ 
    //retrieve calculated widths and number of panels from NewOrder.cs 
    public int[] lookUp_Widths {get; set;} 
    public int lookUp_Rows { get; set; } 

    //Method returning number of pales 
    public int[] GetNumPales1() 
    { 
     int[] all_numPales = { 2, 2, 2, 2, 2, 2, 2, 2, 2, ..."goes on till [941]"...}; 
     int[] numPales = new int[lookUp_Rows]; 

     ID select = new ID(lookUp_Widths, lookUp_Rows); 

     for (int i = 0; i < lookUp_Rows; i++) 
     { 
      numPales[i] = all_numPales[select.Identities[i]]; 
     } 

     return numPales; 
    } 
    //Method returning block sizes (mm) 
    public int[] GetBlocks1() 
    { 
     int[] all_blocks = { 56, 59, 61, 64, 66, 69, 71, 74, "goes on till [941]"...}; 
     int[] blocks = new int[lookUp_Rows]; 

     ID select = new ID(lookUp_Widths, lookUp_Rows); 

     for (int i = 0; i < lookUp_Rows; i++) 
     { 
      blocks[i] = all_blocks[select.Identities[i]]; 
     } 
     return blocks; 
    } 

Спасибо всем!

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