2

たとえば、デバイスの種類を切り替える必要があるプロジェクトに取り組んでいます。C/C++ のように定義したい。これは C# でも同じようにできないことがわかりました。それがどのように機能するかを学ぶためにいくつかの実験的なコードを作成していますが、1 つのことにこだわっています。以下のコードでそれを指摘しました。ぜひご覧ください:)。私のコードのアイデアが明確であることを願っていますが、それを機能させるにはどのように変更すればよいですか?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        productnames pn = new productnames(); 
        string str = textBox1.Text;
        switch (pn) // I am getting an red line under pn; which says: A switch expression or case label must be a bool, char, string, integral, enum or corresponding nullable type
        { 
            case DEVICE1:
                label1.Text = str+"CASE1";
                break;
            case DEVICE2:
                label1.Text = str+"CASE2";
                break;
        }
    }
}
public class productnames
{
    public const string DEVICE1 = "name1";
    public const string DEVICE2 = "name2";
    public const string DEVICE3 = "name3";
    public const string DEVICE4 = "name4";
}

クラス全体を切り替えることができないため、上記のコードは機能しません。より良いアプローチは、次のようなものです。

private const string DEVICE1 = "dev1";
private const string DEVICE2 = "dev2";

        private void button1_Click(object sender, EventArgs e)
        {
            string str = textBox1.Text;
            getCommand(str)
        }

private void getCommand(string Dev)
{
            switch (Dev) 
            { 
                case DEVICE1:
                    label1.Text = str+"CASE1";
                    break;
                case DEVICE2:
                    label1.Text = str+"CASE2";
                    break;
            }
    }

この例は役に立つかもしれません:

#define CMD_VERSION 0
#define CMD_TYPE 1

private void getCommandName(CMD)
{
   switch(CMD)
   {
      case CMD_VERSION:
      return ("ver");
      case CMD_TYPE:
      return ("serienummer");
   }
}
4

4 に答える 4

2

創造性を発揮して、実生活でより迅速に使用できる例を追加しましょう。

using System;

namespace Draft
{
    class Program
    {
        static void Main()
        {
            const string str = "Device2";
            var strParsed = (Devices)Enum.Parse(typeof(Devices), str);

            switch (strParsed) {
                case Devices.Device1:
                    Console.WriteLine("Device 1");
                    break;
                case Devices.Device2:
                    Console.WriteLine("Device 2");
                    break;
                case Devices.Device3:
                    Console.WriteLine("Device 3");
                    break;
                case Devices.Device4:
                    Console.WriteLine("Device 4");
                    break;
            }

            Console.ReadKey();
        }

        public enum Devices {
            Device1,
            Device2,
            Device3,
            Device4
        }
    }
}

[編集]

私は正しい方向に進んでいるようです.あなたの「定義」の例だけが整数を与えます.

しかし、あなたの例に従うと、次のようになります。

public enum Devices {
    Device1 = 0,
    Device2 = 1,
    Device3 = 2,
    Device4 = 3
}
于 2012-09-27T10:02:14.103 に答える
1

私は、辞書ははるかに良い(そしてより速い)方法だと思います

var Products = new Dictionary<string, ProductInfo>()
{
    { "DEVICE1", new ProductInfo("Properties of product 1") },
    { "DEVICE2", new ProductInfo("Properties of product 1") },
    { "DEVICE3", new ProductInfo("Properties of product 1") }
};


var SelectedProduct = Products[textbox1.Text];
label1.Text = SelectedProduct.Info;  
于 2012-09-27T09:58:29.563 に答える
0

これは、次のコードで回避できます。

   public ProductNames
{
    public readonly static DEVICE1 = new ProductNames("DEVICE1");
    public readonly static DEVICE2 = new ProductNames("DEVICE2");
    public readonly static DEVICE3 = new ProductNames("DEVICE3");

    public string Name{get{return _name;}}  
    private readonly _name ;

    private ProductNames(string name)
    {
        _name = name;
    }  
}

// usage
ProductNames pn = GetProcuctName(/* your logic */);
switch(pn.Name)
{
    case ProductNames.DEVICE1.Name:
        // do smth
    case ProductNames.DEVICE2.Name:
        // do smth else
}
于 2012-09-27T09:55:05.663 に答える