打印c#类中的所有变量

本文关键字:变量 打印 | 更新日期: 2023-09-27 18:19:18

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

我有一个类比如

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>";

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

打印c#类中的所有变量

最简单的方法是使用反射。这应该足够了:

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

使用字典,而不是fields: Dictionary<fieldName, fieldValue>,但这是Kind 优于工程的简单直接的解决方案:反射优于强类型类的清晰和可维护的结构。

使用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>

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

我个人认为你最好还是反思一下。如果您使用。net 4或更高版本,并从DynamicObject派生exampleClass,则可以实现您想要做的事情。

本页的示例与您想要做的非常相似。