通配符是否可以处理对象?

时间:2011-03-31 12:10:25

标签: c#

是否可以在参数中使用通配符?我有这个代码重复的属性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;
    }

请帮助......

3 个答案:

答案 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提出的解决方案。