So ändern Sie eine Wertinstanz über den Objekteigenschaftsnamen in C#

黄舟
Freigeben: 2017-09-18 11:01:29
Original
3588 Leute haben es durchsucht

Auszug aus: csdn

Das Zuweisen eines Werts zu einer Objekteigenschaft kann über PropertyInfo.SetValue() erfolgen. Beachten Sie jedoch, dass der Typ des Werts mit der Eigenschaft übereinstimmen muss.

Zwei Möglichkeiten, Objektinstanzen zu erstellen:

1.


var obj = Assembly.Load("AssemblyName").CreateInstance("AssemblyName"+"ClassFullName");
Nach dem Login kopieren

2.

 
var
 obj = Activator.CreateInstance(ClassType);
Nach dem Login kopieren

Beim Erstellen der Instanz können Sie nun einem bestimmten Attribut der aktuellen Instanz einen Wert zuweisen. Rufen Sie zunächst das zuzuweisende Attribut ab.


var property = obj.GetType().GetProperty("PropertyName");//此时可以使用GetProperty获取属性数组,循环进行赋值,这里主要讲解类型问题。
Nach dem Login kopieren

Die Zuweisung kann über die PropertyInfo.SetValue()-Methode erfolgen, Einzelheiten finden Sie im MSDN.

Fall 1, der Attributtyp ist ein bekannter Typ, zum Beispiel: int


int value=500;
property.SetValue(obj,value,null);
Nach dem Login kopieren

Hier ist zu beachten, dass der Werttyp sein muss stimmt mit dem Attributtyp überein, andernfalls wird eine TargetException ausgelöst.

Fall 2: Der Attributtyp ist ein bekannter Typ und der ursprüngliche Wert ist ein anderer Typ. Beispiel: Der Zieltyp ist int und der Wert ist string


string value="500";
property.SetValue(obj,int.TryParse(value),null);//类型转换。
Nach dem Login kopieren

Die ersten beiden Fälle sind sehr einfach Der Zieltyp ist unsicher und erfordert eine Beurteilung der Laufzeit des Programms.

Fall 3: Der Attributtyp ist ein unbekannter, nicht generischer Typ, der Zieltyp ist sich nicht sicher, wie die Typkonvertierung durchgeführt werden soll.


object value="500";
property.SetValue(obj,Convert.ChangeType(value,property.PropertyType),null);//类型转换。
Nach dem Login kopieren

Dadurch werden die meisten Probleme gelöst.

Ich weiß nicht, ob Sie es bemerkt haben, aber ich habe im dritten Fall den Schwerpunkt auf Nicht-Generika gelegt. Funktionieren Generika nicht?
Ja. Wenn Sie nur die Methode Convert.ChangeType() verwenden und die Typkonvertierung immer noch einen Fehler meldet, schauen Sie sich zunächst den folgenden Code an.

Auch wenn der Zieltyp und der Werttyp konsistent sind, wird beim Konvertieren über Convert.ChangeType() immer noch ein Fehler gemeldet.
Um dieses Problem zu lösen, müssen Sie zuerst den Attributwerttyp in den Basistyp konvertieren und dann die Konvertierung durchführen. Wenn man sich den Code ansieht, wird kein Fehler gemeldet, wenn Convert.ChangeType() zum Konvertieren eines nullbaren Typs verwendet wird.
Fügen Sie einige grundlegende Beurteilungsüberprüfungen hinzu, und der Code wird vollständiger.


if (!property.PropertyType.IsGenericType)
            {                //非泛型
                property.SetValue(obj, string.IsNullOrEmpty(value) ? null : Convert.ChangeType(value, property.PropertyType), null);
            }            else
            {                //泛型Nullable<>
                Type genericTypeDefinition = property.PropertyType.GetGenericTypeDefinition();                
                if (genericTypeDefinition == typeof(Nullable<>))
                {
         property.SetValue(obj, string.IsNullOrEmpty(value) ? null : Convert.ChangeType(value, Nullable.GetUnderlyingType(property.PropertyType)), null);
                }
            }
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo ändern Sie eine Wertinstanz über den Objekteigenschaftsnamen in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage