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

構造体の内容を表示するのは非常に簡単です。構造体を初期化した後、表示する新しい「User」オブジェクト内の変数を正確に指定するだけです。これは、次のように新しい「ユーザー」オブジェクト名の後にピリオドを追加することで実行できます。

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 に答える
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 に答える