我创建了一个结构:
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
是否有一种简单的方法来显示结构的所有字段?
答案 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
在消息框中。