2012-07-31 145 views
1

如何獲取某個類中每個屬性的屬性值類型?獲取某個類中每個值的屬性值類型

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

這會產生錯誤Cannot resolve symbol p

SOLUTION:我結束了LINQ將SQL。更乾淨,更容易處理:)。由於喬恩

回答

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 
} 

我個人認爲這是更清潔,更簡單閱讀,並更容易調試。

+0

我正在構建一個sql字符串,但我需要知道每個屬性的類型是什麼,所以我知道如何構建每個where子句。有什麼建議麼? – bflemi3 2012-07-31 19:47:08

+1

@ bflemi3:就個人而言,我會使用LINQ代替構建SQL,但如果你不能這樣做,可以使用'foreach'循環 - 它會更簡單。你可以使用'Dictionary >'(適合'''')來指示每種類型的處理方式。 – 2012-07-31 19:48:59

+0

決定這就是我正在做的,使用LINQ to SQL。再次感謝喬恩! – bflemi3 2012-07-31 21:00:46

1
  1. 不能使用switchType - 它沒有恆定的值就擺在case
  2. 如果您仍然希望您的switch,而你與知名的類型集工作(即系統類型),你可以使用p.PropertyType.GetTypeCode()返回enum