[英]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;
}
不需要局部變量J3
, J5
, J8
等和其他數據結構。 只需在您的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.