如何显示结构的字段?

时间:2012-07-30 17:07:00

标签: c# debugging struct

我创建了一个结构:

public struct User {
   public string name;
   public string email;
   public string age;
}

然后创建一个:

 User user = new User();
 user.name = "Freewind";
 user.email = "abc@test.com";
 user.age = 100;

然后显示它:

MessageBox.Show(user.ToString());

我希望它可以打印用户结构的所有字段,但事实并非如此。它只是显示:

MyApp.User

是否有一种简单的方法来显示结构的所有字段?

3 个答案:

答案 0 :(得分:10)

覆盖结构上的ToString方法:

public override string ToString()
{
    return String.Format("name={0}, email={1}, age={2}", this.name, this.email, this.age);
}

请注意,这不是自动的,您必须手动将任何字段/属性添加到字符串中。

通过反思你可以做到这样的事情:

public override string ToString()
{
    Type type = this.GetType();
    FieldInfo[] fields = type.GetFields();
    PropertyInfo[] properties = type.GetProperties();
    User user = this;

    Dictionary<string, object> values = new Dictionary<string, object>();
    Array.ForEach(fields, (field) => values.Add(field.Name, field.GetValue(user)));
    Array.ForEach(properties, (property) =>
        {
            if (property.CanRead)
                values.Add(property.Name, property.GetValue(user, null));
        });

    return String.Join(", ", values);
}

答案 1 :(得分:0)

使用反射并循环遍历所有属性,如下所示:       var sourceProperties = typeof(User).GetProperties();

  foreach (PropertyInfo sourceProperty in sourceProperties)
  {
    MessageBox.Show( sourceProperty.Name );
    MessageBox.Show( sourceProperty.GetValue( user, null, null ) );
  }

希望它有所帮助。

答案 2 :(得分:0)

显示结构的内容非常容易,在初始化结构之后,您需要确保准确指定要显示的新“用户”对象中的哪个变量。这可以通过在新的“用户”对象名称之后添加句点来完成,如下所示:

MessageBox.Show(user.name);

这将显示“用户”对象的名称。通过将“name”替换为“email”或“age”,可以使用任何其他用户对象变量轻松完成此操作。顺便说一句,通常最好将诸如年龄(或任何数字)之类的东西存储在“int”或“byte”中,因为这样可以比在字符串中存储数字更容易更改值。这是一个例子:

public struct User {
    public string name;
    public string email;
    public int age;
}

or

public struct User {
    public string name;
    public string email;
    //use a byte to hold a value between 0 and 255 (most people don't live to be 255)
    public byte age;
}

当试图显示这个变量时,只需在变量名之后使用“ToString()”,如下所示:

MessageBox.Show(user.age.ToString());

这会将int或byte转换为字符串,因此可以在“MessageBox.Show”方法中使用它。希望这有帮助!

编辑: 此外,当尝试显示结构中的所有变量时,只需执行以下操作:

MessageBox.Show("Name: " + user.name + Environment.NewLine + "Email: " + user.email + Environment.NewLine + "Age: " + user.age + Environment.NewLine);

这将显示:

Name: FreeWind
Email: abc@test.com
Age: 100

在消息框中。