Meu inglês é ruim.
Eu quero adicionar classe a lista de classe, mas eu não quero definir o nome da propriedade.
Ex. // Declarar classe
public class LSale
{
public int id {get;set;}
public string name {get;set}
}
// Código Antigo
public DataTable dt = new DataTable();
public List<LSale> mLSale {get; set;}
foreach ( DataRow t in dt.Rows)
{
mLSale.Add( new LSale {
id = Convert.ToInt32(t["id"].ToString()) ,
name = = t["name"].ToString() });
}
Como adicionar LSale com não definir id e campo de nome mas encontrar a partir de propriedade ou campo na classe LSale.
Exemplo (este código não está certo)
Type mType = typeof( LSale );
LSale mSale = nil;
foreach ( DataRow t in dt.Rows )
{
foreach( Propertyinfo mp in mType.GetProperties() )
{
mSale[mp].Value = t[mp].Value;
}
mLSale.Add( new mSale );
}
Por favor ajude.
Respostas:
0 para resposta № 1você pode usar a reflexão
public T MapObjects<T, Y>(Y item)
{
T _item = Activator.CreateInstance<T>();
foreach (PropertyInfo propertyInfo in typeof(Y).GetProperties())
{
if (typeof(T).GetProperty(propertyInfo.Name, BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public) != null)
typeof(T).GetProperty(propertyInfo.Name, BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public).SetValue(_item, propValue);
}
return _item;
}
onde T é o tipo de destino e Y é o tipo de origem, existe uma condição aqui, os nomes de propriedade dos tipos de origem e destino devem ser os mesmos.