在C#中循环和设置变量,多次使用

时间:2016-06-01 02:00:51

标签: c# class iteration

我有一个包含一堆变量的类TrayDetails

public class TrayDetails
{
    public string ID { get; set;}
    //... some more string variables here
}

然后我在主表上两次宣布。

private TrayDetails Right;
private TrayDetails Left;

我希望迭代特定的RightLeft变量,并在满足条件时将其所有变量设置为string.empty

代码:

Action FillData = () =>
{
     if(Right != null)
     {
        this.label1.Text = Right.ID;
        //... somemore labels = Right.somevariables
     }
     else
     {
         //I would want to put the string.empty variables here using a loop.
         //I cant seem to get PropertyInfo to work
     }

     //similar as above
     if(Left != null)
     // you get the idea
}

如何实现所需的输出?

2 个答案:

答案 0 :(得分:0)

如果我弄错了,那么当Text个对象为{{string时,您希望将所有(表单)控件的Right/Left属性设置为为空 null 1}}

您可以使用Linq

执行此操作
this.Controls
       .OfType<Control>()  // Apply filter, if only for specific controls.
       .ToList()
       .ForEach(x=> x.Text = string.Empty);

答案 1 :(得分:0)

我建议重构一下,以便使用常用方法设置控件。例如,像这样:

Action FillData = () =>
{
    SetupLabels(Right);
    SetupLabels(Left);
}

使用这种方法,您可以拥有以下内容:

Right

请注意,由于您在两种情况下都设置了相同的标签,因此无法正常工作,因此如果您的Left属性不为null,则会设置标签,然后如果TrayDetails属性也不为空,它会再次更改标签,因此您需要稍微修改一下。

这个想法是一样的,你有一个通用的方法设置你的控件并采用SetupLabels的实例。如果您尝试在页面的特定部分设置控件,可以将它们包装在容器中,然后更新<asp:PlaceHolder id="LeftContainer" runat="server"> <asp:Label ID="label1" runat="server" /> <!--Other controls--> </asp:PlaceHolder> <asp:PlaceHolder id="RightContainer" runat="server"> <asp:Label ID="label1" runat="server" /> <!--Other controls--> </asp:PlaceHolder> 方法以获取容器名称。

假设您正在使用WebForms,您可以使用以下内容:

private SetupLabels(TrayDetails trayDetails, string containerName)
{
    PlaceHolder container = (PlaceHolder) Page.FindControl(containerName);
    ((Label) container.FindControl("label1")).Text = (trayDetails != null) ? trayDetails.Id : string.Empty;
    // Set more labels here
}

SetupLabels方法可能如下所示:

{{1}}

它仍然是一个混乱的解决方案,但可以很好地控制从TrayDetails对象中填充标签的确切方式。