¿Hay alguna manera de hacerlo, ya que parece que el método parcial debe volverse vacío (realmente no entiendo esta limitación, pero déjela ser)?¿Cómo devolver el valor del método parcial de C#?
Respuesta
Bueno, técnicamente puede "retorno" un valor de un método parcial, pero tiene que ser a través de un argumento ref
, por lo que es bastante incómodo:
partial void Foo(ref int result);
partial void Foo(ref int result)
{
result = 42;
}
public void Test()
{
int i = 0;
Foo(ref i);
// 'i' is 42.
}
En ese ejemplo, el valor de i
no cambiará si Foo()
no está implementado.
Puro feo, pero +1 para el ejemplo. –
De MSDN:
declaraciones de métodos parciales deben comenzar con la palabra clave contextual parcial y el método debe devolver vacío.
Los métodos parciales pueden tener parámetros de referencia pero no de salida.
Así que la respuesta es no, no se puede.
Quizás si explica un poco más sobre su situación (por qué necesita devolver un valor, por qué la clase es parcial), podemos proporcionar una solución alternativa.
No se puede devolver un valor de un método parcial.
Los métodos parciales pueden o no implementarse. Si se le permitiera devolver un valor de dicho método, ¿qué recibiría la persona que llama?
La razón de la restricción es esta línea de MSDN:
una clase parcial o struct pueden contener un método parcial. Una parte de la clase contiene la firma del método . Se puede definir una implementación opcional en la misma parte u otra parte . Si la implementación no es suministrada, entonces el método y todas las llamadas al método se eliminan al tiempo de compilación. - Énfasis Mina
Si el método no se puede implementar y se puede quitar. ¿Qué pasaría con su valor de retorno si se elimina la llamada?
En cuanto a su pregunta de una solución alternativa, eso depende de lo que intente hacer, pero obviamente no puede usar un método parcial.
Oh. Una vez tuve que hacer esto en un proyecto mío. Puede lanzar una excepción en su método llamado ReturnValueException
que defina como una excepción que tenga una propiedad de objeto denominada ReturnedValue
. Ahora puede llamar a su método Foo()
dentro de un bloque try
y recopilar los resultados en el bloque catch
.
No .. es una broma.
No hagas eso. Nunca.
- 1. C++ especialización de método parcial
- 2. ¿Puede un método C# devolver un método?
- 3. Cómo devolver un valor desde el hilo en C
- 4. Cómo devolver el valor de la función
- 5. Cómo devolver el valor de Action()?
- 6. ¿Qué devolver si el método del controlador Spring MVC no devuelve el valor?
- 7. valor nulo del método genérico
- 8. ¿Devuelve el valor del método de JavaScript asíncrono?
- 9. ¿Debería un método de conexión devolver un valor?
- 10. ¿Cómo puedo devolver NULL desde un método genérico en C#?
- 11. ¿Hay alguna forma de devolver el tipo anónimo del método?
- 12. clase parcial con el método mismo nombre
- 13. ¿Cómo devolver una respuesta JSON parcial utilizando Java?
- 14. C# - Método de valor del tipo de valor: ¿por qué el compilador utiliza la reflexión?
- 15. Devolver siempre el valor positivo
- 16. Devolver un Vista parcial desde $ .Ajax Publicar
- 17. Cómo devolver el texto del código nativo (C++)
- 18. ¿Cómo hacer valer el uso del valor de retorno de un método en C#?
- 19. XPath parcial del atributo conocido
- 20. jQuery-AJAX llamando al método de página ASP.NET. ¿Cómo devolver el valor a jQuery?
- 21. cómo llamar el método de hilo con aruguments y devolver algún valor
- 22. El método debe devolver varios valores
- 23. Cómo devolver el subtipo en el método reemplazado de la subclase en C#?
- 24. ¿Cómo puedo devolver json en una vista parcial en MVC?
- 25. Extracción% 20 Valor del método get
- 26. Método devolver una interfaz
- 27. Cómo sobrescribir un método en Java, pero aún tiene una funcionalidad parcial del método principal
- 28. ¿Cómo obtener Meteor.Call para devolver el valor de la plantilla?
- 29. Método de hilo C# ¿devuelve un valor?
- 30. ¿Cómo devolver un valor de retorno complejo?
+1 porque ni siquiera sabía que * había * métodos parciales. –
Es el principio "cuando un árbol cae en el bosque, ¿es un sonido?". Eso es expresable en C#, el sonido que hace es * void *. –
vea también http://stackoverflow.com/questions/6954572/why-cant-partial-methods-return- anything –