1

我是 C# 的新手,并且随着我的前进而慢慢学习。在控制台应用程序中,我希望能够输入要显示的属性的名称。我偶然发现的问题是 ReadLine 将返回一个字符串,我不知道如何将该字符串转换为对实际属性的引用。

我写了一个简单的例子来解释我想要做什么。该示例现在将只输入它获得两次的任何输入。

我已经尝试过typeof(Person).GetProperty(property).GetValue().ToString(),但我得到的只是一条错误消息,指出 GetValue 没有采用 0 个参数的重载。

谢谢里卡德

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 );
 }

第二个参数是索引: 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 回答