2017-02-20 5 views
-1

Ich möchte Standardwerte für alle decimal Felder in Object festlegen. Verfahren, das es funktioniert wie folgt aussieht:Konvertieren von Typ zu 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; 
} 

Nachdem ich versuche Gießen zu myType, aber es funktioniert nicht

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

Wie kann ich es tun?

+0

Sie sind nicht das eigentliche Objekt gibt Werte in zu setzen und Sie sind nur einen 'Baumuster zur Rückkehr. Es kann nicht in das tatsächliche Objekt umgewandelt werden, das Sie haben. 'SetValue' sollte das tatsächliche Objekt als erstes Argument haben. –

+0

Ich weiß nicht, was dieser Code erwartet. Sie können keine Instanzwerte für einen Typ festlegen. Und 'field.SetValue (field, 0)' ist einfach falsch. Siehe [die Dokumentation] (https://msdn.microsoft.com/en-us/library/6z33zd7h (v = vs.110) .aspx) – Amy

Antwort

1

Sie benötigen ein Objekt als Eingabe und als Ausgabe

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

und Sie werden seine Werte in dem obigen Verfahren

 field.SetValue(_register, 0); 

Schließlich Kette, die die modifizierte Eingangs

return _register; 
} 

gesetzt Aufrufen der Methode

myType = (MyType)SetAllFieldsAsDefault(myType); 

Hier ist ein 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; 
} 

der Ausgang

ist
before 
-1.1 3.3 
after 
0 0 
Verwandte Themen