1

クラス内の各プロパティのプロパティ値タイプを取得するにはどうすればよいですか?

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

これによりエラーが発生しますCannot resolve symbol p

解決策:最終的にLINQtoSQLを使用しました。ただよりクリーンで扱いやすい:)。ありがとうジョン

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 に答える