3

如何将标签名称中的变量内容与其他变量连接起来?

//labels: lbl_01_temp, lbl_02_temp, lbl_03_temp
string XX;
double id_01_temp, id_02_temp, id_03_temp;
lbl_XX_temp.Text= "The Device " +XX+ "has" +id_XX_temp+" ℃";  
4

3 回答 3

6

连接值的干净方法是使用String.Format

lbl_XX_temp.Text= String.Format("The Device {0} has {1} ℃", XX, id_XX_temp);

请参阅 MSDN 文档:String.Format()

也许,我误解了这个问题。我认为 OP 想要将 astring转换为有效的control权利?

网站:

string lblSelected = String.Format("lbl_{0}_temp", XX); 
Label lbl = (Label)this.FindControl(lblSelected);
lbl.Text = String.Format("The Device {0} has {1} ℃", XX, id_XX_temp);

赢表格:

string lblSelected = String.Format("lbl_{0}_temp", XX);
Control[] ctrl = this.Controls.Find(lblSelected, true);
Label lbl = ctrl[0] as Label;
lbl.Text = String.Format("The Device {0} has {1} ℃", XX, id_XX_temp);
于 2012-09-27T00:33:23.233 回答
0

String.Format实际上,它的性能不如您提出的问题那样的直字符串连接。这可能是滴答声和纳秒的问题,但涉及的开销String.Format不仅仅是说 a + b + c 进行字符串连接。

就个人而言,String.Format对我来说看起来更干净,但它并不快。

于 2012-09-27T00:37:17.937 回答
0

我会使用一对数组或字典(将它们设置为读者的众所周知的练习):

labels[index].Text = "Device " + (index + 1) + " has temperature "
    + temperatures[index].ToString(formatString) + " ℃";

编辑

从您评论中的代码来看,您似乎想按名称识别标签,并且您将从整数变量中派生名称,如下所示:

for (int i=1; i<=6; i++)
{
    Label label = GetLabelForIndex(i);
    //do something with the label here
} 

所以问题是,将如何获得给定索引的标签?换句话说, 的实现是GetLabelForIndex(int)什么?这个问题的答案取决于Label我们在谈论什么。它来自哪个图书馆?是WinForms吗?银光?WPF?如果是 WinForms,请参阅Get a Windows Forms control by name in C#。如果是 WPF 或 Silverlight,请参阅按 Name 查找 WPF 控件。这里接受的答案还建议使用带有字符串键的字典,这与我上面的建议类似。

除非您每秒执行数千次,否则使用字典的性能优势可能微不足道,在这种情况下您应该直接使用Findor FindName

于 2012-09-27T06:52:55.507 回答