1

私はC#が初めてで、前進するにつれてゆっくりと学習しています。コンソール アプリケーションで、表示したいプロパティの名前を入力できるようにしたいと考えています。私が遭遇した問題は、ReadLine が文字列を返し、その文字列を実際のプロパティへの参照に変換する方法がわからないことです。

私がやろうとしていることを説明するために簡単な例を書きました。この例では、2 回取得した入力のみを入力します。

試してみtypeof(Person).GetProperty(property).GetValue().ToString()ましたが、0 の引数を取る GetValue のオーバーロードがないというエラー メッセージしか表示されません。

ありがとうリッカード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace AskingForHelp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            p.FirstName = "Mike";
            p.LastName = "Smith";
            p.Age = 33;

            p.displayInfo(Console.ReadLine());
        }
    }

    class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public UInt16 Age { get; set; }

        public Person()
        {
            FirstName = "";
            LastName = "";
            Age = 0;
        }

        public void displayInfo(string property)
        {
            Console.WriteLine(property + ": " + property);
            Console.ReadKey();
        }
    }
}
4

4 に答える 4

1

次のようにsmthを使用する必要があります。

public static object GetPropValue( object src, string propName )
 {
    return src.GetType( ).GetProperty( propName ).GetValue( src, null );
 }

2 番目のパラメーターはインデックスです。 index タイプ: System.Object[] インデックス付きプロパティのオプションのインデックス値。インデックスが設定されていないプロパティの場合、この値は null にする必要があります。

于 2013-01-28T12:45:45.540 に答える
0

GetValueから実際に値を取得するには、クラスのインスタンスが必要です。このような:

typeof(Person).GetProperty(property).GetValue(this).ToString()
// to be used in a non-static method of Person
于 2013-01-28T12:44:08.610 に答える
0

プロパティを含むオブジェクトの参照を GetValue 関数に与える必要があります。

displayInfo 関数を変更する必要があります。

public void displayInfo(string property, Person p)

次に、この関数で GetValue 関数を呼び出すことができます

于 2013-01-28T12:45:23.250 に答える
0

これにより、探しているものが得られます。

    static void Main(string[] args)
    {
            Person p = new Person();
            p.FirstName = "Mike";
            p.LastName = "Smith";
            p.Age = 33;
            Console.WriteLine("List of properties in the Person class");
            foreach (var pInfo in typeof (Person).GetProperties())
            {
                Console.WriteLine("\t"+ pInfo.Name);
            }
            Console.WriteLine("Type in name of property for which you want to get the value and press enter.");
            var property = Console.ReadLine();
            p.displayInfo(property);
    }


    class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public UInt16 Age { get; set; }

        public Person()
        {
            FirstName = "";
            LastName = "";
            Age = 0;
        }

        public void displayInfo(string property)
        {
            // Note this will throw an exception if property is null 
            Console.WriteLine(property + ": " + this.GetType().GetProperty(property).GetValue(this, null));
            Console.ReadKey();
        }
    }
于 2013-01-28T13:10:44.397 に答える