簡體   English   中英

C#如何將字符串轉換為類的實例?

[英]C# How do I convert a string into an instance of a class?

在我的程序中,我有一個Class Tracer:

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

    namespace Tracepak_Heat_Loss_Program
    {
        class Tracer
        {
            public string family;
            public string model;
            public string type;
            public int output;
            public int voltage;
            public int maxMaintain;
            public int maxIntermittent;
            public string tRating;
            public string approvals;
            public string code;

            public Tracer(string f, string m, string t, int o, int v, int mM, int mI,string tR, string a, string c) 
            {            
                family = f;
                model = m;
                type = t;
                output = o;
                voltage = v;
                maxMaintain = mM;
                maxIntermittent = mI;
                tRating = tR;
                approvals = a;
                code = c;
            }
        }    
    }

在我的主要形式中,我創建了多個跟蹤器的實例:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;


    namespace Tracepak_Heat_Loss_Program
    {
        public partial class mainForm : Form
        {
            public mainForm()
            {
                InitializeComponent();
            }

            private void mainForm_Load(object sender, EventArgs e)
            {
            }


            Tracer J3 = new Tracer("Raychem BTV", "3BTV1-CT", "Self-Reg", 3, 120, 150, 185, "T6", "FM/CSA/ATEX", "J3");
            Tracer J5 = new Tracer("Raychem BTV", "5BTV1-CT", "Self-Reg", 5, 120, 150, 185, "T6", "FM/CSA/ATEX", "J5");
            Tracer J8 = new Tracer("Raychem BTV", "8BTV1-CT", "Self-Reg", 8, 120, 150, 185, "T6", "FM/CSA/ATEX", "J8");
            Tracer J10 = new Tracer("Raychem BTV", "10BTV1-CT", "Self-Reg", 10, 120, 150, 185, "T6", "FM/CSA/ATEX", "J10");

我有一個主要形式的方法,該方法從列表框中返回跟蹤器名稱

    public string GetTracer()
    {
        String s = tracerListBox.Text;
        int index = s.IndexOf(" ");
        return index >= 0 ? s.Substring(0, index): s;
    }
    // This could yield "J3" for example

我希望能夠使用GetTracer()的結果來檢索該跟蹤器的屬性。

例如:

我可以打電話

    J3.family;

    // The result of which is "Raychem BTV"

我想做的是使用

    GetTracer().family;

並使其返回與我的方法GetTracer返回的跟蹤器關聯的屬性。

這可能嗎? 預先感謝您的協助。 我對編程非常陌生,盡管我試圖通過使用類使代碼更健壯,但事實證明,它比我想象的要困難得多。

除非GetTracer返回Tracer對象,否則不能執行GetTracer().Name

如果要根據代碼查找示蹤劑,則應考慮一些字典來在其中存儲示蹤劑名稱:

Dictionary<string, Tracer> dict = new Dictionary<string, Tracer>;

並在其中插入對每個創建的跟蹤器的引用:

Tracer J3 = new Tracer("Raychem BTV", "3BTV1-CT", "Self-Reg", 3, 120, 150, 185, "T6", "FM/CSA/ATEX", "J3");
dict.Add("J3", J3);

之后,您可以輕松地執行以下操作:

string name = GetTracer();
if(dict.ContainsKey(name))
{
    Tracer item = dict[name];
    string family = item.family;
}

不需要局部變量J3J5J8等和其他數據結構。 只需在您的Tracer類中添加ToString方法

public override string ToString()
{
    return code;
}

並將您的Tracer對象添加到列表框中,如下所示

listBox.Items.Add( new Tracer("Raychem BTV", "3BTV1-CT", "Self-Reg", 3, 120, 150, 185, "T6", "FM/CSA/ATEX", "J3") );
listBox.Items.Add( new Tracer("Raychem BTV", "5BTV1-CT", "Self-Reg", 5, 120, 150, 185, "T6", "FM/CSA/ATEX", "J5") );
listBox.Items.Add( new Tracer("Raychem BTV", "8BTV1-CT", "Self-Reg", 8, 120, 150, 185, "T6", "FM/CSA/ATEX", "J8") );
listBox.Items.Add( new Tracer("Raychem BTV", "10BTV1-CT", "Self-Reg", 10, 120, 150, 185, "T6", "FM/CSA/ATEX", "J10") );

這樣,您將在ListBox中看到code

在ListBox的某些事件中,您可以將tracer對象作為

void listBox_SelectedIndexChanged(object sender, EventArgs e)
{
    Tracer tracer =  ((ListBox)sender).SelectedItem as Tracer;
    MessageBox.Show(tracer.family);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM