是否可以在参数中使用通配符?我有这个代码重复的属性TextLine1,TextLine2,TextLine3和TextLine 4.是否可以用通配符替换数字,以便我可以根据用户输入传递数字。
TextLine1,TextLine2,TextLine3和TextLine 4是ReportHeader类的属性。
public Control returnTextLine(ReportHeader TextLineObj,int i)
{
System.Windows.Forms.Label lblTextLine = new System.Windows.Forms.Label();
lblTextLine.Name = TextLineObj.**TextLine1**.Name;
lblTextLine.Font = TextLineObj.**TextLine1**.Font;
lblTextLine.ForeColor = TextLineObj.**TextLine1**.ForeColor;
lblTextLine.BackColor = TextLineObj.**TextLine1**.BackgroundColor;
lblTextLine.Text = TextLineObj.**TextLine1**.Text;
int x = TextLineObj.**TextLine1**.x;
int y = TextLineObj.**TextLine1**.y;
lblTextLine.Location = new Point(x, y);
return lblTextLine;
}
请帮助......
答案 0 :(得分:5)
不,这是不可能做到的
但是,你可以做的是扩展代表TextLineObj
的类,其TextLines
属性为ReadonlyCollection
:
public class TextLineObj
{
public ReadonlyCollection<TextLine> TextLines { get; private set; }
public TextLineObj()
{
TextLines = new ReadonlyCollection<TextLine>(
new List<TextLine> { TextLine1, TextLine2,
TextLine3, TextLine4 });
}
}
像这样使用:
TextLineObj.TextLines[i].Name;
答案 1 :(得分:2)
简短回答:不,不可能使用通配符来引用对象。
您应该在TextLine
中存储ReportHeader
个实例的集合。这样,您可以通过索引轻松访问每个TextLine。
public class ReportHeader
{
private TextLine[] textLines
...
public TextLine[] TextLines
{
get { return this.textLines; }
}
...
}
public Control returnTextLine(ReportHeader reportHeader, int textLineIndex)
{
TextLine textLine = reportHeader.TextLines[textLineIndex];
System.Windows.Forms.Label lblTextLine = new System.Windows.Forms.Label();
lblTextLine.Name = textLine.Name;
lblTextLine.Font = textLine.Font;
lblTextLine.ForeColor = textLine.ForeColor;
lblTextLine.BackColor = textLine.BackgroundColor;
lblTextLine.Text = textLine.Text;
int x = textLine.x;
int y = textLine.y;
lblTextLine.Location = new Point(x, y);
return lblTextLine;
}
答案 2 :(得分:1)
当然可以通过反思来完成。但我建议使用Daniel提出的解决方案。