4

我创建了一个结构:

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

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

4

3 回答 3

11

覆盖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);
}
于 2012-07-30T17:09:07.737 回答
0

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

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

希望能帮助到你。

于 2012-07-30T17:12:52.000 回答
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

消息框内。

于 2012-07-30T17:50:24.473 回答