2011-05-31 115 views
1

我需要將此片段從Java轉換爲.NET(而不是C#,但我也知道Visual Basic)。 這是代碼:將代碼從Java轉換爲.NET

typeStrings = new Dictionary<Int16, String>(); 

    Field[] fields = Type.class.getDeclaredFields(); 

    for (Field field : fields) { 
     try { 
      typeStrings.put(field.getInt(null), field.getName()); 
     } catch (IllegalArgumentException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }   
    } 

第一行(Dictionary類)是.NET(我的翻譯嘗試;))。 我知道Field類是來自java.lang.reflect.Field,但我找不到.NET的等價物。 親切的問候!

+0

'Int16'是不是在Java中的類型,你不能從'int'自動地投放。你能否更新你的例子,以便它能在Java中編譯? – 2011-05-31 12:26:11

回答

7

您正在查找System.Reflection.FieldInfo類和typeof(SomeType).GetFields()

+0

+1 ..我遲到了 – V4Vendetta 2011-05-31 12:20:24

2
var typeStrings = new Dictionary<int, string>(); 

FieldInfo[] fields = yourObject.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance); 
foreach (var field in fields) 
{ 
    typeStrings.Add((int)field.GetValue(yourObject), field.Name); 
} 
1

嘗試這樣做

var typeStrings = new Dictionary<Int16, String>(); 

    var fields = this.GetType().GetFields(); 

    foreach (var field in fields) 
    { 
     try 
     { 
      typeStrings.Add(Convert.ToInt16(field.FieldHandle.Value.ToInt32().ToString()), field.Name); 
     } 
     catch (Exception) 
     { 
      throw; 
     } 
    } 
+0

你的'catch'塊沒用。 – SLaks 2011-05-31 13:31:30

+0

'(short)value.ToInt32()' – SLaks 2011-05-31 13:32:29

+0

我知道,我只是想顯示在c#中捕捉,也轉換返回相同的結果 – DeveloperX 2011-05-31 14:07:39