2017-02-20 186 views
-1

我想爲Object中的所有decimal字段設置默認值。方法做它看起來像這樣:將類型轉換爲myType

private Type SetAllFieldsAsDefault(Type register) 
{ 
    var fields = register.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); 
    foreach (var field in fields) 
    { 
     if (field.FieldType != typeof(double)) continue; 
     field.SetValue(field, 0); 
    } 
    return register; 
} 

我嘗試後鑄造myType,但它不工作

myType = (MyType)SetAllFieldsAsDefault(myType.GetType()); 

我該怎麼辦呢?

+0

你不給它實際的對象設定值到和你只返回一個'Type'。它不能投射到你擁有的實際物體上。 'SetValue'應該有實際的對象作爲第一個參數。 –

+0

我不知道這段代碼期望做什麼。您不能在類型上設置實例值。而'field.SetValue(field,0)'完全是錯誤的。請參閱[文檔](https://msdn.microsoft.com/en-us/library/6z33zd7h(v = vs.110).aspx) – Amy

回答

1

你需要一個對象作爲輸入,並作爲輸出

private object SetAllFieldsAsDefault(object _register) 
{ 
     Type register = _register.GetType(); 

,你會在上面的方法

 field.SetValue(_register, 0); 

最後鏈上的修改的輸入設置其值

return _register; 
} 

調用方法

myType = (MyType)SetAllFieldsAsDefault(myType); 

這裏是一個test online

public static void Main() 
{ 
    var myType = new MyType(); 
    Console.WriteLine(myType.one + " " + myType.two); 
    Console.WriteLine("before"); 
    myType = SetAllFieldsAsDefault(myType) as MyType; 
    Console.WriteLine("after"); 
    Console.WriteLine(myType.one + " " + myType.two); 
} 

class MyType { 
    internal double one = -1.1; 
    internal string test = "hi"; 
    internal double two = 3.3; 
} 

輸出

before 
-1.1 3.3 
after 
0 0