首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Reflection C#问题

Reflection C#问题
EN

Stack Overflow用户
提问于 2009-09-28 22:20:09
回答 4查看 331关注 0票数 0

我在获取一个属性是另一个类的类的值时遇到了问题。

下面是一个示例:

代码语言:javascript
运行
复制
public class Person 
{
    private int age;
    private string name;

    public Person()
    {
        Address = new Address();

    }

    public int Age
    {
        get { return age; }
        set { age = value; }
    }

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public Address Address { get; set; }
}

public class Address
{
    public string street { get; set; }
    public string houseno { get; set; }
}


public class Program
{
    static void Main(string[] args)
    {

        Person person = new Person();
        person.Age = 27;
        person.Name = "Fernando Vezzali";
        person.Address.houseno = "123";
        person.Address.street = "albert street";

        Type type = typeof(Person);

        PropertyInfo[] properties = type.GetProperties();
        foreach (PropertyInfo property in properties)
        {
            Console.WriteLine("{0} = {1}", property.Name, property.GetValue(person, null));

        }
   }
}

但是这样我就得不到地址值。

有人能帮帮忙吗?

EN

回答 4

Stack Overflow用户

发布于 2009-09-28 22:24:53

type.GetProperties()仅获取类型的的属性,其中之一是对象Addressstreethouseno不是Person上的属性。

Console.Write...对每个参数隐式调用ToString()。因此,您可能会看到"Address - Namespace.Address“作为输出,因为someAddressObject.ToString()将返回类型名。

要在这种特定情况下获得所需内容,最简单的方法是覆盖Address对象上的ToString(),以输出该对象的一些有意义的字符串表示:

代码语言:javascript
运行
复制
public override ToString()
{
    return string.Format("#{0} {1}",
        this.houseno,
        this.street); //returns #123 StreetName
}

如果您实际上需要编写对象上每个子对象的每个属性,这可能会变得相当复杂-您实际上是在谈论序列化,它沿着对象树递归到每个对象中。

票数 2
EN

Stack Overflow用户

发布于 2009-09-28 22:28:07

这里是可能的ToString,考虑到Jason的答案...

您还可以将返回的反射对象转换为一个地址,以访问完整的对象和属性

代码语言:javascript
运行
复制
public class Address
{
    public string street { get; set; }
    public string houseno { get; set; }
    public override ToString() {
        return string.Format("street: {0}, house: {1}", street, houseno);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2009-09-28 22:25:16

如果您对返回格式化字符串作为Address的值感到满意,那么您需要在Address中实现ToString(),或者您的迭代代码需要检查每个属性,以确定该属性的类型是否也公开了属性,并将其排队以供进一步检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1489668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档