Heim  >  Artikel  >  Backend-Entwicklung  >  So ändern Sie eine Wertinstanz über den Objekteigenschaftsnamen in C#

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

黄舟
黄舟Original
2017-09-18 11:01:293542Durchsuche

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");

2.

 
var
 obj = Activator.CreateInstance(ClassType);

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获取属性数组,循环进行赋值,这里主要讲解类型问题。

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);

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);//类型转换。

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);//类型转换。

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);
                }
            }

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!

Stellungnahme:
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