打印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>";
或类似的东西。有什么建议吗?
最简单的方法是使用反射。这应该足够了:
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
,则可以实现您想要做的事情。
本页的示例与您想要做的非常相似。