打印C类中的所有变量#

时间:2013-06-21 13:00:06

标签: c# class variables

首先,我宁愿不使用反射来实现这一点。

我有一个课可以说

public class exampleClass
{
  public string var1 = "one";
  public string var2 = "two";
  public int var3 = 3;
  public string var4 = "four";
  etc. etc..
}

我希望能够动态地遍历该类并打印出变量。我考虑过序列化但是不确定如何为这种情况实现它(我能找到的唯一例子是XML而我不想要那样)我也不想真正改变类的结构无论如何。

我这样做的原因是因为我正在构建一个HTML表并希望这样做:

for(int i = 0; i < exampleClass.Count; i++)
  tbl_row = "<td>" + exampleClass[i] + "</td>";

或类似的东西。有什么建议吗?

4 个答案:

答案 0 :(得分:2)

easisets方式是使用反射。这应该足够了:

var example =  new exampleClass();

var allPublicFields = example.GetType().
       GetFields(BindingFlags.Public | BindingFlags.Instance );

使用字典而不是字段:Dictionary<fieldName, fieldValue>,但这是 善意 over 设计简单明了的解决方案:对强类型类的清晰和可维护的结构进行反思。

答案 1 :(得分:1)

如果您不想使用反射,那么如何将数据存储在字典中,而不是存储在自定义类中?这样,您可以根据需要简单地迭代键或值。

答案 2 :(得分:1)

使用TagBuilder构建HTML完全相同。

var tagBuilder = new TagBuilder("tr");
var exampleClass =  new exampleClass();

tagBuilder.InnerText += "<td>Field</td><td>Value</td>";

foreach(var field in typeof(exampleClass)
                         .GetFields(BindingFlags.Public | BindingFlags.Instance))
{
    var nameBuilder = new TagBuilder("td");
    var valueBuilder = new TagBuilder("td");

    nameBuilder.InnerHtml = field.Name;
    valueBuilder.InnerHtml = field.GetValue(exampleClass).ToString();

    tagBuilder.InnerHtml += string.Format("{0}{1}",
                                          nameBuilder.ToString(),
                                          valueBuilder.ToString());
}

输出:

<tr>
    <td>Field</td><td>Value</td>
    <td>var1</td><td>one</td>
    <td>var2</td><td>two</td>
    <td>var3</td><td>3</td>
    <td>var4</td><td>four</td>
<tr>

答案 3 :(得分:1)

就个人而言,我认为你的反思会更好。如果您使用的是.NET 4或更高版本并从DynamicObject派生exampleClass,则可以实现您要执行的操作。

example on this page非常类似于您的目标。