2

整数で列挙を宣言できる方法があるかどうか知りたいです。または私が使用できる他の選択肢がある場合。

例えば:

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

各サイズに何らかのIDを割り当てる必要があるため、ユーザーが特定の幅を入力すると、それぞれのcutSizewitchが異なる配列に格納されていることを識別できる必要があります。

これは、Excelファイルをプログラムに読み込んで、特定の関連情報を特定するために何らかのルックアップを実行することを回避するための私の試みです。

助けてください

前もって感謝します

4

5 に答える 5

3

とにかくあなたのアプローチでは名前が許可されていないので、配列を使用してください:

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

そして、おそらく、列挙型を追加してインデックスを作成します。

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

取得するため

 int size = panelSizes[panelSizeNames.a315];
于 2013-02-27T13:26:45.620 に答える
2

私には、ルックアップの代わりにアルゴリズムを使用して適切なカットサイズを取得したいと思うようです。値がこのように線形である場合、辞書/列挙型/配列は必要ありません。

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

そしてその逆

    int index = 940;
    int panelSize = (index * 5) + 300;
于 2013-02-27T13:27:13.490 に答える
1

辞書はどうですか?

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

キーが 0 から N までのインデックスである場合、単純な配列でも問題ないことに注意してください...

于 2013-02-27T13:27:08.920 に答える
1

Dictionary<int,int>id と width をキーと値として最初にロードする a を使用します。

于 2013-02-27T13:27:12.947 に答える
0

これが私がしたことです:

構造体を使用して、入力配列をサイズが入力された配列と比較し、一致する各サイズの位置を配列「Identities」に格納することができました。これで、同じ位置にある他の配列から値を返すメソッドを簡単に作成できるようになりました... (スプレッドシートのルックアップに似ています)

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;
    }

みんな、ありがとう!

于 2013-03-06T12:33:04.977 に答える