質問

私populating異なる種類のオブジェクトdatarows各attrivuteに関連するオブジェクト=のsimiliarlyフィールド名フィールドでのdatarow.

い汎用的に使用する機能ではないかと思います。どんな力の型を返しオブジェクトからの機能です。いいのかを <T> 文法を実際におこなうことができ、 PopulateObject<T> 戻らないのとして取得しますコンパイラエラーな暗黙的に変換タイプ'オブジェクト'を'JobCard' 自分の以下のコードを

public JobCard AcceptJobCard(Guid jobCardGuid, Guid userGuid)
{
    try
    {
        JobCard jc= new JobCard();
        DL_ISMS.DataSets.JobCardDS.View_JobcardDataTable dtJC = BL_ISMS.Meter.JobCard_CB.FetchJobCard(jobCardGuid);
        DL_ISMS.DataSets.JobCardDS.View_JobcardRow jcRow = dtJC[0];



        DateTime dateAccept = DateTime.Now;
        bool res = BL_ISMS.Meter.JobCard_CB.UpdatePdaJobCard(userGuid, jobCardGuid, null, null, null, JobCardStatus.Accepted.GetHashCode(), null, null, null, null, "", "", "", "", "", "", null, dateAccept, null, null, null, null, null, null);

        if (res)
        {                
            jc = PopulateObject<JobCard>(jc, jcRow);

            return jc;
        }
        else
        return jc;
    }
    catch (Exception ex )
    {
        Trace.WriteException(ex);
        throw;
    }
}

private object PopulateObject<T>(object dataObj, System.Data.DataRow dataRow)
{

    Type type = dataObj.GetType();
    System.Reflection.PropertyInfo[] proplist = type.GetProperties();
    string s = "";
    foreach ( System.Reflection.PropertyInfo propertyitem in proplist)
    {
        s += propertyitem.Name + ":" + (propertyitem.GetValue(dataObj,null)).ToString() + "\r\n";
        propertyitem.SetValue(dataObj, dataRow["propertyitem.Name"], null);
    }
    return (T)dataObj;
}

----更新後の第2の回答----

このコード:民間T PopulateObject(T dataObj、システム.データです。DataRow dataRow) {

    System.Reflection.PropertyInfo[] proplist = dataObj.GetType().GetProperties();

    foreach ( System.Reflection.PropertyInfo propertyitem in proplist)
    {
        if(propertyitem.Name != "")
            try
            {
                propertyitem.SetValue(dataObj, dataRow[propertyitem.Name], null);
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("does not belong to table"))
                {
                    propertyitem.SetValue(dataObj, PopulateObject<propertyitem.GetType()>(propertyitem, dataRow), null);
                }
                else
                throw;
            } 
    }
    return dataObj;
}

私はヒットのような障害を取り除くために別のものです。の属性は、実際に別のオブジェクトというお客様は、11属性を出すことができます。思いもより入れ子物が潜ん.どのように対応していpopulatingこれらの入れ物は、人が1のdatarow?.

対応これらのオブジェクト:-思い出のChildObjタイプの親Objdata -を呼び出ProcessChildObj()関数へのChildObjTypeのdatarow -とProcessChildObj()な名前に一致し、その属性?

として、上記のコード) のPopulateObject再帰的に.しかしこうした提言の問題としてコンパイラの警告を発し、過去、現在、未来でのobjの型への再帰呼び出し:

propertyitem.SetValue(dataObj,PopulateObject(propertyitem,dataRow),null);//原因のコンパイラの信"オペレーター'<'は適用できなオペランドのタイプ'メソッドグループ"、"システム。タイプ'"

どんなエキスのメソッドは、入れ子のchildObjの型パラメータとして?

役に立ちましたか?

解決

にあなたのメソッドのシグネチャを変更します:

private T PopulateObject<T>(T dataObj, System.Data.DataRow dataRow)

また、私はあなたが唯一の既存のオブジェクトを更新するので、任意のオブジェクトを返す必要はありませんだと思います。あなただけ使用することができます:

private void PopulateObject(object dataObj, System.Data.DataRow dataRow)

他のヒント

再帰なのです。 なぜ 返すのですか?すでにみんなで...呼び出し側に変化します。ばね用のジェネリック医薬品の方法(いない)で利用 object なジェネリック医薬品.

場合、コードそのものになると思い最大の問題を使用して 文字列 "propertyitem.名前"より評価するプロパティ値: propertyitem.Name:

propertyitem.SetValue(dataObj, dataRow[propertyitem.Name], null); // no quotes

お見たいと思い このポスト ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top