Vra

Ek skep 'n 'algemene' biblioteek wat deur ander spanlede as verwysing gebruik moet word. Die metodes is tipies void funksies met geen werklike teruggestuurde data nie.

Ek is op soek na 'n rede om die gebruik van hierdie metodes binne 'n Try...Catch blok deur ander. Ek moet seker maak dat foute behoorlik hanteer word. Ek vertrou egter op 'n Boole -retoer -tipe, maar dit sal my ook nie toelaat om die foutboodskap terug te gee nie, so my enigste opsie is om 'n Exception.

As behoorlike dwing nie moontlik is nie, hoe kan ek dan 'n kenmerk maak wat opduik as ek saamstel om die ontwikkelaar te waarsku oor die probeer/vangvereiste? (soort van die Obsolete kenmerk).

Enige ander beter benaderings?

Redigeer:

Hier is my volledige scenario:

Ek het 'n kode -metode wat 'n webdiens skakel om 'n waarde op afstand op te dateer. Die opdatering is baie belangrik. Die metode werk dit goed, maar wat as die webdiens nie bereikbaar is nie? Die oproep gee geen waarde terug nie.

Was dit nuttig?

Oplossing

Plaas iets binne 'n try/catch blok maak dit nie "behoorlik hanteer" nie - in werklikheid in die oorgrote meerderheid Van gevalle is die regte manier om 'n uitsondering te hanteer, om dit tot op die volgende vlak te laat borrel. Waarskuwing: try/finally is baie meer gereeld om hulpbronopruiming moontlik te maak, maar selfs meer gereeld as dit using.

U kan nie "en u moet dit korrek gebruik" op die kode afdwing nie; Dit is implisiet in enige API, en u sal net irritasie en ergernis veroorsaak, en mense tot onvanpaste en onbehulpsame koderingsstyle dwing, terwyl u 'n heeltemal kunsmatig en verkeerd gevoel dat die kode korrek is.

As u seker wil wees dat die kode korrek funksioneer: toets dit.

Daar is geen eienskappe wat u vir hierdie scenario kan gebruik nie. U kan waarskynlik 'n FXCOP -reël of soortgelyke skep, maar om die redes hierbo: ek beveel dit nie aan nie.

Ander wenke

Ek sou dit nie eintlik doen nie, maar as 'n prettige oplossing vir die gestelde probleem, kan u u eie uitsonderingstipe opbou: 'n SuccessException. Dan gooi u hierdie uitsondering aan die einde van u metode om sukses aan te dui. Dit maak die metode redelik onbruikbaar sonder een of ander vorm van probeer/vangs. Maar weer: Moenie dit doen nie.

U kan 'n pasgemaakte resultaatklas teruggee:

public class Result
{
    public bool Okay { get; set; }
    public string Error { get; set; }
}

Dan:

var result = AttemptSomething();

if (!result.Okay)
{
    Console.WriteLine(result.Error);
}

Of miskien terugkeer string:

var error = AttemptSomething();

if (!String.IsNullOrEmpty(error))
{
    Console.WriteLine(error);
}

Of het die fout as 'n uit:

string error;
if (!AttemptSomething(out error))
{
    Console.WriteLine(error);
}

Of terugkeer Exception maar nie gooi.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top