2017-02-20 140 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