Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

305
Vistas
¿Para qué sirve el operador "con" en C#?

Me he encontrado con este código:

 var rectangle = new Rectangle(420, 69); var newOne = rectangle with { Width = 420 }

Me preguntaba acerca with la palabra clave en el código C#. ¿Para qué sirve? ¿Y cómo se puede usar? ¿Y qué beneficios aporta a la lengua?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Es un operador que se usa en expresiones para facilitar la duplicación de un objeto, anulando algunas de sus propiedades/campos públicos (opcional) con expresión - MSDN

Actualmente solo se puede utilizar con registros. Pero tal vez no habrá tal restricción en el futuro (suposición).

Aquí hay un ejemplo de cómo se puede usar:

 // Declaring a record with a public property and a private field record WithOperatorTest { private int _myPrivateField; public int MyProperty { get; set; } public void SetMyPrivateField(int a = 5) { _myPrivateField = a; } }

Ahora veamos cómo se puede usar with operator:

 var firstInstance = new WithOperatorTest { MyProperty = 10 }; firstInstance.SetMyPrivateField(11); var copiedInstance = firstInstance with { }; // now "copiedInstance" also has "MyProperty" set to 10 and "_myPrivateField" set to 11. var thirdCopiedInstance = copiedInstance with { MyProperty = 100 }; // now "thirdCopiedInstance " also has "MyProperty" set to 100 and "_myPrivateField" set to 11. thirdCopiedInstance.SetMyPrivateField(-1); // now "thirdCopiedInstance " also has "MyProperty" set to 100 and "_myPrivateField" set to -1.

NOTA para tipos de referencia de MSDN:

En el caso de un miembro de tipo de referencia, solo se copia la referencia a una instancia de miembro cuando se copia un operando. Tanto el operando de copia como el original tienen acceso a la misma instancia de tipo de referencia.

Esa lógica se puede modificar modificando el constructor de copia de un tipo de registro. Cita de MSDN:

De forma predeterminada, el constructor de copias es implícito, es decir, generado por el compilador. Si necesita personalizar la semántica de copia de registro, declare explícitamente un constructor de copia con el comportamiento deseado.

 protected WithOperatorTest(WithOperatorTest original) { // Logic to copy reference types with new reference }

Y en términos de los beneficios que brinda, creo que ahora debería ser bastante obvio que hace que la copia de instancias sea mucho más fácil y conveniente.

over 4 years ago · Santiago Trujillo Denunciar

0

Básicamente, el operador with creará una nueva instancia de objeto (solo registros, por ahora), al "hacer frente a los valores" del objeto "fuente" y anular algunas propiedades con nombre en el objeto de destino.

Por ejemplo, en lugar de hacer esto:

 var person = new Person("John", "Doe") { MiddleName = "Patrick" }; var modifiedPerson = new Person(person.FirstName, person.LastName) { MiddleName = "William" };

Puedes hacerlo:

 var modifiedPerson = person with { MiddleName = "Patrick" };

Básicamente, escribirás menos código.

Use esta fuente para obtener más detalles sobre el ejemplo anterior y la documentación oficial para obtener más ejemplos.

over 4 years ago · Santiago Trujillo Denunciar

0

La respuesta corta es la siguiente: se agregó with palabra clave en C# para facilitar la copia de objetos complicados, con la posibilidad de anular algunas de las propiedades públicas. Los ejemplos ya se proporcionan brevemente en la respuesta aceptada.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda