0

次のクラスがあります。これには、2 つのネストされたクラスがあります。

public class Request
{
    public Hotel Hotel {get;set;}
    public Room Room {get;set;}
}

ネストされたクラス

public class Hotel
{
    public int HotelId {get;set;}
    public string Name {get;set;}
    public string Address {get;set;}
    public string CountryCode {get;set;}
}

public class Room
{
   public int RoomId {get;set;}
   public string Name {get;set;}
}

基本的に、オブジェクトをうまく作成できます。

Request oRequest = new Request();

私がやりたいことは、ネストされたクラスを見つけてクラスを反復処理し、これらを次のような関数に渡すことができるようにすることです

Type t = oBookingRequest.GetType();

foreach (PropertyInfo pi in t.GetProperties())
{
   CallMyFunction(pi);
}

私が抱えている問題は、CallMyFunction(pi) を呼び出すときに、実際のオブジェクトとして pi を渡していないかのようにクラス プロパティの値を実際に表示できないことです。関数 CallMyFunction(oRequest.Hotel) を呼び出すと正常に動作するため、これを正しく行っていますか。

編集:

関数 CallMyFunction は、ValidationResult を使用する ValidationContext 関数であるため、個々のプロパティ値ではなく、すべてのプロパティを含む実際のオブジェクトを渡す必要があります。関数 CallMyFunction は

    private List<ValidationResult> CallMyFunction (object oObject)
    {
        var context = new ValidationContext(oObject, serviceProvider: null, items: null);
        var results = new List<ValidationResult>();
        Validator.TryValidateObject(oObject, context, results, false);

        return results;
    }
4

1 に答える 1

2

PropertyInfo.GetValueを使用して、プロパティの実際の値を関数に渡す必要があります。

foreach (PropertyInfo pi in t.GetProperties())
{
  CallMyFunction(pi.GetValue(oBookingRequest, null));
}
于 2013-07-30T10:18:12.427 に答える