En C# 7, il est possible de soulever une exception dans une expression:Quel est le type de compilation de l'expression "throw" dans C# 7?
int n = list != null ? list.Count : throw new NullReferenceException("list");
Dans cette position, le jet expression peut substituer une expression de tout type.
Maintenant, je veux définir une fonction qui exécute une action avant de soulever une exception:
??? DoSomethingAndThrowException(Exception e)
{
MessageBox.Show("Prepare for an exception!");
throw e;
}
Quel serait le type de retour de cette fonction, de sorte qu'il peut être utilisé dans les mêmes endroits que l'original jet expression:
int n = list != null ? list.Count : DoSomethingAndThrowException(new NullReferenceException("list"));
il y a la possibilité de le déclarer comme méthode générique:
T DoSomethingAndThrowException<T>(Exception e) {...}
Mais cela semble fastidieux, car le type générique n'apparaît nulle part dans le corps de la fonction. Est-ce la seule façon de le faire, ou y a-t-il un type que je ne connais pas, et qui est assignable à n'importe quel type (un type "anti-objet", pour ainsi dire)?
De la [proposition] (https://github.com/dotnet/csharplang/blob/master/proposals/csharp-7.0/throw-expression.md): * "Un throw_expression n'a pas de type. "* (et *" Une expression_course est convertible en chaque type par une conversion implicite. ") – UnholySheep
Non, C# ne correspond pas à un type" Nothing "de Scala. – Lee
@UnholySheep - Merci pour le lien! –