1

如何获取类中每个属性的属性值类型?

this.GetType().GetProperties().ToList().ForEach(p => {
    switch(typeof(p.GetValue(this, null))) {
        case float:
            ...
            break;
        case string:
            ...
            break;
    }
});

这会产生错误Cannot resolve symbol p

解决方案:我最终选择了 LINQ to SQL。更清洁,更容易处理:)。谢谢乔恩

4

2 回答 2

1

我不认为这是一个问题 - 我得到:

Test.cs(12,29): error CS1026: ) expected
Test.cs(12,42): error CS1514: { expected
Test.cs(12,42): error CS1525: Invalid expression term ')'
Test.cs(12,44): error CS1002: ; expected
Test.cs(13,9): error CS1525: Invalid expression term 'case'
Test.cs(13,19): error CS1001: Identifier expected
Test.cs(13,19): error CS1525: Invalid expression term ':'
Test.cs(13,20): error CS1002: ; expected
Test.cs(15,9): error CS1525: Invalid expression term 'case'
Test.cs(15,20): error CS1001: Identifier expected
Test.cs(15,20): error CS1525: Invalid expression term ':'
Test.cs(15,21): error CS1002: ; expected

您无法打开类型。ForEach不过,一般情况下这样使用是可以的。

示例代码:

using System;
using System.Linq;

class Test
{
    public string Foo { get; set; }    
    public int Bar { get; set; }

    public void DumpProperties()
    {
        this.GetType().GetProperties().ToList()
            .ForEach(p => Console.WriteLine("{0}: {1}", p.Name,
                                            p.GetValue(this, null)));
    }

    static void Main()
    {
        new Test { Foo = "Hi", Bar = 20 }.DumpProperties();
    }
}

现在诚然,我通常不会在这里使用ForEach- 我只是使用一个foreach循环:

foreach (var property in GetType().GetProperties())
{
    // Use property
}

就我个人而言,我认为这样更简洁、更易于阅读且更易于调试。

于 2012-07-31T19:45:29.697 回答
1
  1. 您不能使用switchon Type- 它没有要输入的常量值case
  2. 如果您仍然想要您的switch,并且您正在使用一组众所周知的类型(即系统类型),您可以使用p.PropertyType.GetTypeCode()which returns enum
于 2012-07-31T19:51:03.737 回答