c#如何在一个班轮中“返回如果不为空”?
发布时间:2020-12-15 23:49:29 所属栏目:百科 来源:网络整理
导读:如果它不为空或继续执行,或者如何制作这样的东西,是否有一个衬垫返回一些东西? 这一切都是为了避免在几种方法中复制面食中的IF线. 初始代码是这样的: var error = ValidateStuff(someArg);if (error != null){ return error;}DoOtherStuff(); 那么如何重构
如果它不为空或继续执行,或者如何制作这样的东西,是否有一个衬垫返回一些东西?
这一切都是为了避免在几种方法中复制面食中的IF线. 初始代码是这样的: var error = ValidateStuff(someArg); if (error != null) { return error; } DoOtherStuff(); 那么如何重构它以避免复制粘贴,如果无处不在? ValidateStuff(someArg) ? return ___ : continue; DoSomethingElse(); AndMoreStuff(); -编辑- public string Foo(string arg) { string fuu = GetMeSomething(arg); if(fuu != null) return fuu; ImDoingThings(); return "I did things"; } 拥有这个会很棒: public string Foo(string arg) { ReturnIfNotNull(GetMeSomething(arg)); ImDoingThings(); return "I did things."; } 解决方法
当然:
void ValidateStuff(someArg) { if (!validation(someArg)) { throw new ValidationException("Whatever went wrong...",errorDetails); } } 在你的代码中: ValidateStuff(someArg); DoOtherStuff(); P.S.:我经常将ValidateStuff中的通用代码与#if(DEBUG)[…] #else […] #endif结合起来,这样生产无关的东西不会最终出现在生产二进制文件中. 怎么警告? 我用了一些技巧: >仅在您确实需要时才构建错误对象. 显然你可以按照你认为合适的方式扩展它…… 没有进一步到期: public class WarningsHandler : IDisposable { private List<WarningErrorBase> errors = null; // Default handler. Remember to use 'using',or otherwise you'll end up // with pain and suffering! public void Dispose() { var errors = FetchValidationResults(); if (errors != null && errors.Count > 0) { throw new ValidationException(errors); } } // Handler if you have a better idea than using an Exception public IEnumerable<Error> FetchValidationResults() { var errors = this.errors; this.errors = null; return errors; } public void Warn(bool condition,Func<Warning> errorBuilder) { if (condition) { if (errors == null) { errors = new List<WarningErrorBase>(); } errors.Add(errorBuilder()); } } public void Error(bool condition,Func<Error> errorBuilder) { if (condition) { if (errors == null) { errors = new List<WarningErrorBase>(); } errors.Add(errorBuilder()); throw new ValidationException(FetchValidationResults()); } } } 如何使用它? void MyThing() { using (var handler = new WarningsHandler()) { handler.Error(foo == null,"Foo must have a value"); handler.Warn(foo.Count > 2,() => new Warning("You should have less than 2 foo's present."); // etc. } } 好的,还有一个技巧. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |