Existe uma maneira em c # onde eu possa usar a reflexão para definir uma propriedade de objeto?
Ex:
MyObject obj = new MyObject();
obj.Name = "Value";
Eu quero definir obj.Name
com reflexão. Algo como:
Reflection.SetProperty(obj, "Name") = "Value";
Existe alguma forma de fazer isso?
c#
.net
reflection
properties
Melursus
fonte
fonte
var val = Convert.ChangeType(propValue, propInfo.PropertyType);
fonte: devx.com/vb2themax/Tip/19599obj.GetType().GetProperty("Name")?.GetSetMethod()?.Invoke(...)
CanWrite=False
tipos, certo?Você também pode fazer:
onde target é o objeto que terá sua propriedade definida.
fonte
Reflexão, basicamente, ie
ou existem bibliotecas para ajudar em termos de conveniência e desempenho; por exemplo, com FastMember :
(que também tem a vantagem de não precisar saber com antecedência se é um campo versus uma propriedade)
fonte
Ou você pode envolver um liner de Marc dentro de sua própria classe de extensão:
e chame assim:
Para uma boa medida, vamos adicionar um método para obter um valor de propriedade:
fonte
Sim, usando
System.Reflection
:fonte
Use algo assim:
ou
fonte
Você também pode acessar os campos usando uma maneira semelhante:
Com reflexão, tudo pode ser um livro aberto :) No meu exemplo, estamos vinculando a um campo no nível da instância privada.
fonte
Você pode tentar isso quando quiser atribuir em massa propriedades de um Objeto de outro Objeto usando nomes de Propriedades:
fonte
Acabei de publicar um pacote Nuget que permite configurar não apenas as propriedades de primeiro nível, mas também as propriedades aninhadas no objeto especificado em qualquer profundidade.
Aqui está o pacote
Define o valor de uma propriedade de um objeto pelo caminho a partir da raiz.
O objeto pode ser um objeto complexo e a propriedade pode ser uma propriedade aninhada profunda em vários níveis ou pode ser uma propriedade diretamente sob a raiz.
ObjectWriter
encontrará a propriedade usando o parâmetro path da propriedade e atualizará seu valor. Caminho da propriedade são os nomes anexados das propriedades visitadas da raiz até a propriedade do nó final que queremos definir, delimitadas pelo parâmetro delimiter string.Uso:
Para configurar as propriedades diretamente sob a raiz do objeto:
Ou seja.
LineItem
classe tem uma propriedade int chamadaItemId
Para configurar a propriedade aninhada vários níveis abaixo da raiz do objeto:
Ou seja.
Invite
A classe possui uma propriedade chamadaState
, que possui uma propriedade chamadaInvite
(do tipo Invite), que possui uma propriedade chamadaRecipient
, que possui uma propriedade chamadaId
.Para tornar as coisas ainda mais complexas, a
State
propriedade não é um tipo de referência, é astruct
.Aqui está como você pode definir a propriedade Id (para o valor da string "outlook") na parte inferior da árvore de objetos em uma única linha.
fonte
Com base na sugestão de MarcGravell, construí o método estático a seguir. O método atribui genericamente todas as propriedades correspondentes do objeto de origem ao destino usando o FastMember
fonte