Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

148
Views
Nombre de sintaxis de inicialización de propiedad de C#

¿Cuál es el nombre de la sintaxis utilizada en la propiedad Headers? Los encabezados se definen como public HttpRequestHeaders Headers {get;} . Me duele la cabeza que el lado izquierdo de la expresión no sea un setter.


No lo encuentro en las características ocultas de C# o Historial de C#

 var tokenRequest = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = new Uri("http://localhost"), Headers = { { HttpRequestHeader.Authorization.ToString(), "abc123" }, { HttpRequestHeader.ContentType.ToString(), "application/x-www-form-urlencoded" } }, Content = new FormUrlEncodedContent(new Dictionary<string, string> { ["grant_type"] = "client_credentials" }) };
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

No estoy seguro de si hay un nombre oficial para él, pero he visto que se llama inicializador de colección " tipeo de pato ", hecho implícitamente por el compilador. El compilador buscará un método Add adecuado implementado por el tipo, así como el tipo tiene que implementar la interfaz IEnumerable . HttpRequestMessage.Headers finalmente se ajusta a estos dos criterios y, aunque la propiedad solo tiene un captador, el compilador traducirá el inicializador de la colección en llamadas "Agregar" consecutivas justo después de que se haya creado el objeto.

over 4 years ago · Santiago Trujillo Report

0

Se trata de inicializadores de objetos con inicialización de propiedad de solo lectura de colección .

Me duele la cabeza que el lado izquierdo de la expresión no sea un setter.

Usando un inicializador de colección, puede establecer el valor de una propiedad durante el constructor incluso sin un set definido. Específicamente para una colección, la documentación vinculada anteriormente dice esto:

Los inicializadores de colección le permiten especificar uno o más inicializadores de elementos cuando inicializa un tipo de colección que implementa IEnumerable y tiene Agregar con la firma adecuada como método de instancia o método de extensión.

Esto puede ser realmente extraño (o genial, dependiendo de cómo lo mires), porque puedes construir tu propio método de extensión Add() para casi cualquier tipo de IEnumerable y usarlo para hacer cosas realmente interesantes.

Recuerde también que cuando usa una propiedad que también es una colección u otra propiedad, no necesita un set para llamar a métodos o cambiar valores de propiedad dentro de este objeto o colección. En su lugar, primero get la referencia a la colección y luego usa el acceso proporcionado por esa propiedad anidada.

Por ejemplo, supongamos que tiene una variable tokenRequest que tiene una propiedad Headers de tipo HttpRequestHeaders . El tipo HttpRequestHeaders a su vez tiene un método Add() . Para llamar a ese método, primero get la referencia a la propiedad Headers y el método de llamada en esa referencia. Nunca se usa ni se necesita ningún set y, sin embargo, logró cambiar una propiedad que solo get ha definido.

Los inicializadores de colección se aprovechan de esto.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!