3

ToString() をオーバーライドし、GetType() を使用して、使用されているオブジェクトの型を返そうとしています。情報を返していますが、名前空間が含まれています。問題は、どうすれば NameSpace を取り除き、オブジェクト名だけを表示できるかということです。これが私のコードです:

namespace Trial
{
   class Testing
   {
      static void Main(string[] args)
      {
         //Variables
         Person[] objectPerson = new Person[5]; //create an array of references
         objectPerson[0] = new Person(10, "John", 35, 1200.00);
         objectPerson[1] = new Person(20, "Jill", 30, 2400.00);
         objectPerson[2] = new Person(30, "Joann", 40, 600.00);
         objectPerson[3] = new Person(40, "Jimmy", 25, 4800.00);
         objectPerson[4] = new Person(50, "Jamie", 45, 300.00);

         for (int y = 0; y < objectPerson.Length; ++y)
         {
            Console.WriteLine(objectPerson[y].ToString());
         }

         Console.Write("\nPress any key to exit . . .");
         Console.ReadKey();
      }
   }
   class Person
   {
      //Data fields
      private int number;
      private string name;
      private int age;
      private double amountDue;

      //Constructors
      public Person(): this(9,"ZZZ",0,0.00)
      {
      }
      public Person(int _Number, string _Name, int _Age, double _AmountDue)
      {
         Number = _Number;
         Name = _Name;
         Age = _Age;
         AmountDue = _AmountDue;
      }
      //Properties
      public int Number
      { 
         get { return number; }
         set { number = value; }
      }
      public string Name
      {
         get { return name; }
         set { name = value; }
      }
      public int Age
      {
         get { return age; }
         set { age = value; }
      }
      public double AmountDue
      {
         get { return amountDue; }
         set { amountDue = value; }
      }

      //Overrides
      public override string ToString()
      {
         return(this.GetType() + ": " + this.Number +  " - " + this.Name + " (" + this.Age.ToString() + "yo) | The total annual ammount is: " + this.AmountDue.ToString("C") + " and the quarterly payment is " + (this.AmountDue / 4).ToString("C"));
      }
   }
}
4

4 に答える 4

3

Type名前を使用してを表す方法はいくつかあります。

typeof(YourClassName).Name //Output is YourClassName.
typeof(YourClassName).FullName //Output is Namespace + YourClassName.
typeof(YourClassName).AssemblyQualifiedName //Output is Namespace + YourClassName + assembly name, version and signature.

型を印刷してそれらのいずれかを選択しないと、Type.ToString代わりにメソッドが呼び出さType.FullNameれ、デフォルトの文字列として が得られます。

また、C# 6.0 では、構文 nameof(YourClassName) を使用できます。これは、コンパイル時に型の標準名を含む定数に置き換えられます (以下は、次の例からの逆コンパイルです)。

の名前

たとえば、次のコードがあります。

namespace ConsoleTests
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(typeof(Program));
            Console.WriteLine(typeof(Program).Name);
            Console.WriteLine(typeof(Program).FullName);
            Console.WriteLine(typeof(Program).AssemblyQualifiedName);
            Console.WriteLine(nameof(Program));
        }
    }
}

出力は次のとおりです。

ConsoleTests.Program

プログラム

ConsoleTests.Program

ConsoleTests.Program、ConsoleTests、バージョン = 1.0.0.0、カルチャ = ニュートラル、PublicKeyToken = null

プログラム

于 2015-10-04T21:21:23.040 に答える
2

あなたが探していますGetType().Name

于 2015-10-04T21:18:14.530 に答える
0

C#-6 を使用している場合は、次のnameof演算子を使用できます。

var typeName = nameof(Person);

または、他の人が述べたように、GetType().Nameから継承されたクラス名についてMemberInfo

いずれにせよ、文字列補間を使用して連結を単純化することもできます:

public override string ToString()
{
    return $"{nameof(Person)}:{Number}-{Name}({Age}yo) |
             Total amount is: {AmountDue:C} 
             and the quarterly payment is: { (AmountDue / 4):C}";
}
于 2015-10-04T21:19:46.610 に答える
0

Type.Name プロパティを使用できます - https://msdn.microsoft.com/en-us/library/system.reflection.memberinfo.name(v=vs.110).aspxを参照してください

于 2015-10-04T21:21:19.603 に答える