有没有没有“ if”检查就可以获取值的方法?

时间:2018-11-20 05:48:09

标签: c#

我的代码当前如下所示:

if (App.cardSetWithWordCount == null)
                App.cardSetWithWordCount = App.DB.GetCardSetWithWordCount(Settings.cc.Text());

我意识到这已经几乎是一个单行检查,但是想知道最新版本的C#是否存在一种编码这种结构的方法,它甚至更干净?

2 个答案:

答案 0 :(得分:4)

没有更干净的方法,只有更冗长和更易读的方法,我认为您应该对自己拥有的东西感到满意。

if (App.cardSetWithWordCount == null)
   App.cardSetWithWordCount = App.DB.GetCardSetWithWordCount(Settings.cc.Text());

尽管您可以做到

App.cardSetWithWordCount = App.cardSetWithWordCount ?? App.DB.GetCardSetWithWordCount(Settings.cc.Text());

其他资源

?? Operator (C# Reference)

  

??运算符称为空值运算符。它返回   如果操作数不为null,则为左侧操作数;否则为false。否则返回   右操作数。

答案 1 :(得分:1)

以下一些小的修改:

.Any()

只是添加了一个其他的更具确定性的方法。另外,如果您的计数是列表,那么您也可以使用if (Title != null && this.Title.Length > 0 ) { // safe to use }

C#6.0随附Monadic null checking

根据上面的链接:

之前:

if    (this.Title?.Length > 0 ) 
{ ... }

之后:

import { Injectable, NgModule} from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse} from '@angular/common/http';
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import 'rxjs/add/operator/do';
@Injectable()
export class HttpsRequestInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const dupReq = req.clone({ headers: req.headers
    .set('Access-Control-Allow-Origin','*')
    .set('Content-Type', 'application/json')
    .set('Authorization', 'Basic XXXXXXXXXXXXXXXXXXXXXX')
    .set('Access-Control-Allow-Credentials','true') });
    return next.handle(dupReq);
  }
};
@NgModule({
  providers: [
    { provide: HTTP_INTERCEPTORS, useClass: HttpsRequestInterceptor, multi: true }
  ]
})