128 votes

Comment utiliser le mot-clé jets de style Java en C #?

En Java, le mot clé throws permet à une méthode de déclarer qu'elle ne gérera pas une exception toute seule, mais la jettera plutôt vers la méthode d'appel.

Existe-t-il un mot-clé / attribut similaire en C #?

S'il n'y a pas d'équivalent, comment pouvez-vous obtenir le même effet (ou un effet similaire)?

151voto

serg10 Points 10157

L'op s'interroge sur les C# équivalent de Java throws clause - pas l' throw mot-clé. Il est utilisé dans les signatures de méthode en Java pour indiquer un checked exception peut être lancée.

En C#, il n'y a pas d'équivalent direct de Java vérifié exception. C# n'a pas d'équivalent de la méthode de la signature de la clause.

// Java - need to have throws clause if IOException not handled
public void readFile() throws java.io.IOException {
  ...not explicitly handling java.io.IOException...
}

se traduit par

// C# - no equivalent of throws clause exceptions are unchecked
public void ReadFile() 
{
  ...not explicitly handling System.IO.IOException...
}

101voto

Oded Points 271275

En Java, vous devez soit gérer une exception, soit marquer la méthode comme une méthode susceptible de la renvoyer à l'aide du mot clé throws .

C # n'a pas ce mot clé ou un mot équivalent, comme en C #, si vous ne gérez pas une exception, il bouillonnera jusqu'à ce qu'il soit attrapé ou s'il ne soit pas attrapé, il mettra fin au programme.

Si vous voulez gérer puis relancer, vous pouvez faire ce qui suit:

 try
{
  // code that throws an exception
}
catch(ArgumentNullException ex)
{
  // code that handles the exception
  throw;
}
 

59voto

mvanella Points 81

Oui c'est un vieux thread, cependant j'ai souvent trouver des vieux fils quand je suis googler réponses alors j'ai pensé que je voudrais ajouter quelque chose d'utile que j'ai trouvé.

Si vous utilisez Visual Studio 2012 il est équipé d'un outil qui peut être utilisé pour permettre une IDE de niveau "jette" équivalent.

Si vous utilisez les Commentaires de Documentation XML, comme mentionné ci-dessus, vous pouvez utiliser le <exception> balise pour indiquer le type de l'exception levée par la méthode ou de la classe ainsi que des informations sur quand ou pourquoi il est jeté.

exemple:

    /// <summary>This method throws an exception.</summary>
    /// <param name="myPath">A path to a directory that will be zipped.</param>
    /// <exception cref="IOException">This exception is thrown if the archive already exists</exception>
    public void FooThrowsAnException (string myPath)
    {
        // This will throw an IO exception
        ZipFile.CreateFromDirectory(myPath);
    }

21voto

Andreas_D Points 64111

Voici une réponse à une question similaire, je viens de fonds sur bytes.com:

La réponse courte est non, il n'y a pas vérifié les exceptions en C#. L' concepteur de la langue discute de cette décision, dans cette interview:

http://www.artima.com/intv/handcuffs.html

Le plus proche que vous pouvez obtenir est d'utiliser les balises dans votre XML de la documentation, et de distribuer NDoc généré docs avec votre code/assemblées afin que d'autres personnes peuvent voir les exceptions que vous jetez (ce qui est exactement ce que MS ne dans la documentation MSDN). Vous ne pouvez pas compter sur le compilateur pour vous parler d'exceptions non gérées, cependant, comme vous avez peut être utilisée dans java.

3voto

Pranay Rana Points 69934

Vous demandez à ce sujet:

Re-lancer une exception

 public void Method()
{
  try
  {
      int x = 0;
      int sum = 100/x;
  }
  catch(DivideByZeroException e)
  {
      throw;
  }
}
 

ou

 static void Main() 
    {
        string s = null;

        if (s == null) 
        {
            throw new ArgumentNullException();
        }

        Console.Write("The string s is null"); // not executed
    }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X