Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建或返回缓存对象_C#_Caching_Design Patterns - Fatal编程技术网

C# 创建或返回缓存对象

C# 创建或返回缓存对象,c#,caching,design-patterns,C#,Caching,Design Patterns,我发现自己写了很多这样的代码: private Foo _CacheFoo; public Foo GetFoo() { if (this._CacheFoo == null) { this._CacheFoo = new Foo(); } return this.CacheFoo; } private Bar _CacheBar; public Bar GetBar() { if (this._CacheBar == null) { this._Cache

我发现自己写了很多这样的代码:

private Foo _CacheFoo;

public Foo GetFoo() {
  if (this._CacheFoo == null) {
    this._CacheFoo = new Foo();
  }
  return this.CacheFoo;
}

private Bar _CacheBar;

public Bar GetBar() {
  if (this._CacheBar == null) {
    this._CacheBar = new Bar();
  }
  return this._CacheBar;
}
我想知道是否有一种合理的方法来封装其中的缓存部分

您可以使用:

private Lazy _foo=new Lazy(()=>new foo());
公共Foo GetFoo()
{
返回_foo.Value;
}
尽管对于每个要返回的实例来说,这仍然是一个相对较大的输入量。

您可以使用:

private Lazy _foo=new Lazy(()=>new foo());
公共Foo GetFoo()
{
返回_foo.Value;
}
尽管对于每个要返回的实例来说,这仍然是一个相对较大的输入量。

您可以使用:

private Lazy _foo=new Lazy(()=>new foo());
公共Foo GetFoo()
{
返回_foo.Value;
}
尽管对于每个要返回的实例来说,这仍然是一个相对较大的输入量。

您可以使用:

private Lazy _foo=new Lazy(()=>new foo());
公共Foo GetFoo()
{
返回_foo.Value;
}

尽管对于每个要返回的实例来说,这仍然是一个相对较大的输入量。

好吧,您可以使用一些语法糖,它稍微减少了代码量:

private Foo _CacheFoo;
public Foo GetFoo()
{
    return _CacheFoo ?? (_CacheFoo = new Foo());
}

好吧,你可以使用一些语法糖,它稍微减少了代码量:

private Foo _CacheFoo;
public Foo GetFoo()
{
    return _CacheFoo ?? (_CacheFoo = new Foo());
}

好吧,你可以使用一些语法糖,它稍微减少了代码量:

private Foo _CacheFoo;
public Foo GetFoo()
{
    return _CacheFoo ?? (_CacheFoo = new Foo());
}

好吧,你可以使用一些语法糖,它稍微减少了代码量:

private Foo _CacheFoo;
public Foo GetFoo()
{
    return _CacheFoo ?? (_CacheFoo = new Foo());
}

使用本地成员进行缓存?我从来没有抽象过它,但是对于这种样式,我经常使用null合并操作符:
return\u CacheFoo??(_CacheFoo=newfoo())。对于使用缓存提供程序进行缓存,我过去曾使用表达式将要调用的方法作为表达式,这反过来可以获取缓存键(通过参数)和修改方法参数(通过表达式访问者)。使用本地成员进行缓存?我从来没有抽象过它,但是对于这种样式,我经常使用null合并操作符:
return\u CacheFoo??(_CacheFoo=newfoo())。对于使用缓存提供程序进行缓存,我过去曾使用表达式将要调用的方法作为表达式,这反过来可以获取缓存键(通过参数)和修改方法参数(通过表达式访问者)。使用本地成员进行缓存?我从来没有抽象过它,但是对于这种样式,我经常使用null合并操作符:
return\u CacheFoo??(_CacheFoo=newfoo())。对于使用缓存提供程序进行缓存,我过去曾使用表达式将要调用的方法作为表达式,这反过来可以获取缓存键(通过参数)和修改方法参数(通过表达式访问者)。使用本地成员进行缓存?我从来没有抽象过它,但是对于这种样式,我经常使用null合并操作符:
return\u CacheFoo??(_CacheFoo=newfoo())。对于使用缓存提供程序进行缓存,我过去曾使用表达式将要调用的方法作为表达式,这反过来又支持获取缓存键(通过参数)和修改方法参数(通过表达式访问者)我不相信我完全忘记了懒惰。我不相信我完全忘记了懒惰。我不相信我完全忘记了懒惰。我不相信我完全忘记了懒惰