2016-06-24 5 views
1
class Employee 
    { 
     public string EmployeeId; 
     public UserGroup[] UserGroups; 
     public Department Department; 
     public List<Address> Address; 
    } 
    class UserGroup 
    { 
     public int GroupId; 
     public string GroupName; 
     public string UserName; 
     public string Password; 
    } 
    public class Department 
    { 
     public int DeptId; 
     public string DeptName; 
    } 
    public class Address 
    { 
     public string Street; 
     public string ZipCode; 
     public decimal Latitude; 
     public decimal Longitude; 
    } 
    /// <summary> 
    /// This method should loop and read all the properties of Employee object and and assign value to that property 
    /// Ex: if propertyName is EmployeeId, propertyValue must be assigned to it. 
    /// Ex: if propertyName is GroupName, propertyValue must be assigned to it. 
    /// Ex: if propertyName is DeptName, propertyValue must be assigned to it. 
    /// Ex: if propertyName is Latitude, propertyValue must be assigned to it. 
    /// </summary> 
    /// <param name="obj"></param> 
    /// <param name="propertyName"></param> 
    /// <param name="propertyValue"></param> 
    public static AssignValueToProperty(Employee obj, string propertyName, string propertyValue) 
    { 
     //Implementation Pending 
    } 

EmployeeオブジェクトPropertyNameとPropertyValueを指定すると、すべての内部オブジェクトのプロパティをループし、そのプロパティに値を割り当てることができます。誰も私にこれを手伝ってもらえますか?前もって感謝します。オブジェクト内にあるオブジェクトのすべてのプロパティを取得します。

答えて

1

我々は、そのプロパティにC#.NETで反射を利用またgetset値をオブジェクトのプロパティにアクセスすることができます。

私はあなたがこのようなものを探していると思います。あなたは、オブジェクトのすべてのプロパティをループにしたい

class Employee 
    { 
     public string EmployeeId; 
     public UserGroup[] UserGroups; 
     public Department Department; 
     public List<Address> Address; 
    } 

あるご与えEmployeeオブジェクトを考慮

。あなたは次のようにそれを行うことができます。

Employee objEmp = new Employee(); 

//loop 

foreach(var property in objEmp.GetType().GetProperties()) 
{ 
    AssignValueToProperty(objEmp, property.Name, "{Your Value}"); 
} 

次に、あなたのAssignValueToProperty方法であなたが

public static AssignValueToProperty(Employee obj, string propertyName, string propertyValue) 
{ 
    objEmp.GetType().GetProperty(propertyName).SetValue(objEmp, propertyValue, null); 
} 

のようなまた、私は追加したい何かを持っているでしょう、あなたは、オブジェクト構造が UserGroupがある UserGroup[] UserGroupsのような性質を有する持っています別のオブジェクト。 AssignValueToPropertyメソッドは、 Employeeオブジェクトに異なるデータ型を持つときに、プロパティ値を文字列データ型として受け入れるため、ここでは機能しません。したがって、上記のような複数のオブジェクトプロパティをループして、最後にそれらを従業員オブジェクトに設定するだけです。

datatypesもチェックしてオブジェクトを設定できます。 BONUS

foreach(var property in objEmp.GetType().GetProperties()) 
{ 
    // Get PropertyType 
    string datatype = property.PropertyType.Name; 
    // Apply conditions on the datatype basis 
    if (datatype.Equals("string") && property.Name.Equals("EmployeeId")) 
    { 
     // assign string values 
     objEmp.GetType().GetProperty(property.Name).SetValue(objEmp, "{your string value}", null); 
    } 
    else if (datatype.Equals("UserGroup") && property.Name.Equals("UserGroups")) 
    { 
     // assign object value 
     objEmp.GetType().GetProperty(property.Name).SetValue(objEmp, "{your UserGroup Object}", null); 
    } 
    // so on other properties 
} 
// And Finally Use `objEmployee` with all properties values set. 

すなわち

あなたはまた見つけて、次のようなラムダ式を使用してプロパティを設定することができます:あなたがでクラスオブジェクトを作成する必要がある場合

objEmp.GetType().GetProperties().Where(x => x.Name.Equals("{PropertyName}") && x.PropertyType.Name.Equals("{Target datatype}")).FirstOrDefault().SetValue({Your Object}, {Your Value}, null); 

をする場合にはランタイムとメソッド定義は次のようになります。

public static AssignValueToProperty(string obj, string propertyName, string propertyValue) 
{ 
    Type type = Type.GetType(obj, true); 
    object objEmp = Activator.CreateInstance(type); 
    objEmp.GetType().GetProperty(propertyName).SetValue(objEmp, propertyValue, null); 
} 

ホープスヘルペス...

+0

このシナリオでは、Sriが作成した4つのクラスに4つの機能があります。この1つの方法ですべてのクラスを処理する方法はありますか?つまり、メソッド "AssignValueToProperty"で "Employee"クラスを制限せずに、すべてのクラスに対してこのメ​​ソッドを使用するということです。 –

+0

私の前提として、名前空間の下にある任意のクラスのインスタンスを作成し、上ですでに説明したように、リフレクションを通じてそのプロパティを設定できる動的関数を記述したいとします。これを行うには、タイプtype = Type.GetType( "Employee"、true);オブジェクトobjEmp = Activator.CreateInstance(type);を実行してください。希望が役立ちます。 –

+0

私は自分の答えを更新し、新しいメソッド定義も追加しました。 –

関連する問題