2011-06-17 17 views
1

この1つは...ので、私は最初のコードを紹介し説明することはほとんど困難である現在のクラスに新しいクラス値を設定するにはどうすればよいですか?

注:私は..でこれを作成しなかったものをここで助けを

 
public class Class1 
{ 
    public string Title {get;set;} 
    public string Name {get;set;} 


    public Class1(Class1 class1) 
    { 
     // ?? How do I populate current class with new class values? 
     // ?? this = class1; - Does not work 
     // I want to avoid having to manually set each value 
    } 
} 

おかげで...あまり混乱メイド例私の拡張クラス..できるように今すぐできるように

Extensions.MapValues(class1, this);

 
    public static void MapValues(object from, object to) 
    { 
     var fromProperties = from.GetType().GetProperties(); 
     var toProperties = to.GetType().GetProperties(); 

     foreach (var property in toProperties) { 
      var fromProp = fromProperties.SingleOrDefault(x => x.Name.ToLower() == property.Name.ToLower()); 

      if(fromProp == null) { 
       continue; 
      } 

      var fromValue = fromProp.GetValue(from, null); 
      if(fromValue == null) { 
       continue; 
      } 

      property.SetValue(to, fromValue, null); 
     } 
    } 


+0

私は新しいクラス値によって – RubenHerman

+0

はあなたが値を初期化することを意味しない...それは個別に各値を設定することなく可能だとは思わないのですか?あなたはそれを手動で行う必要があることを恐れています。 – msarchet

+0

これは混乱します。 DataRowには何が含まれていますか?あなたは、DataRowからClass1のインスタンスを作成しようとしていますか? – slandau

答えて

1

おそらく、手動で各値を設定して容易になります。 DataRowの列名は、あなたのクラスの各プロパティに対して同じであるあれば言っ

、およびかのタイプを使用すると、プロパティ名を設定するためにリフレクションを使用することができ、同じように同じです。あなたは多少このようにそれを行うだろう:

public Class1(DataRow row) 
{ 
    var type = typeof(Class1); 
    foreach(var col in row.Table.Columns) 
    { 
     var property = type.GetProperty(col.ColumnName); 
     property.SetValue(this, row.Item(col), null); 
    } 
} 
+0

私はこれに非常によく似た何かをしました。 – jaekie

+0

@LeeHull:あなたの編集が私を混乱させました。私はあなたの質問を誤解しているはずです。私はあなたがDataRowからClass1の値を設定しようとしていると思った – Randolpho

+0

説明が少し難しく、おそらく行の代わりにClass1が渡されて表示されているはずです。 – jaekie

5

できません。

プロパティを手動でコピーするか、コンストラクタをrow.ToClass1()を返すstaticファクトリメソッドに置き換えることができます。

0

どの程度

this.Name = class1.Name; 
this.Title = class1.Title; 
関連する問題