Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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# 这个getter每次调用';引用了什么?_C#_Properties_Getter - Fatal编程技术网

C# 这个getter每次调用';引用了什么?

C# 这个getter每次调用';引用了什么?,c#,properties,getter,C#,Properties,Getter,假设我有一门课是这样的: public class MyClass { ... public List<SomeClass> MyProperty { get { SomeClass.GetCollectionOfThese(someId); } } ... } 在这种情况下,数据库是否被调用了两次?或者属性值是否缓存在内存中?您的实现将导致多个数据库调用。如果你需要的话,你必须进行缓存。比如: p

假设我有一门课是这样的:

public class MyClass {
...    
    public List<SomeClass> MyProperty {
        get { 
            SomeClass.GetCollectionOfThese(someId);
        } 
    }
...
}

在这种情况下,数据库是否被调用了两次?或者属性值是否缓存在内存中?

您的实现将导致多个数据库调用。如果你需要的话,你必须进行缓存。比如:

public class MyClass {
...    

    private List<SomeClass> _myProperty = null;
    public List<SomeClass> MyProperty {
        get { 
            if (_myProperty == null) _myProperty = SomeClass.GetCollectionOfThese(someId);
            return _myProperty;
        } 
    }
...
}
公共类MyClass{
...    
私有列表_myProperty=null;
公共列表MyProperty{
获取{
如果(_myProperty==null)_myProperty=SomeClass.GetCollectionOfThese(someId);
归还我的财产;
} 
}
...
}

当然,您可能希望为客户端提供一种刷新缓存的方法。

您的实现将导致多个数据库调用。如果你需要的话,你必须进行缓存。比如:

public class MyClass {
...    

    private List<SomeClass> _myProperty = null;
    public List<SomeClass> MyProperty {
        get { 
            if (_myProperty == null) _myProperty = SomeClass.GetCollectionOfThese(someId);
            return _myProperty;
        } 
    }
...
}
公共类MyClass{
...    
私有列表_myProperty=null;
公共列表MyProperty{
获取{
如果(_myProperty==null)_myProperty=SomeClass.GetCollectionOfThese(someId);
归还我的财产;
} 
}
...
}

当然,您可能希望为客户端提供一种刷新缓存的方法。

这取决于您在数据层中使用的技术。
例如,如果将Linq2Sql与单个DataContext一起使用,DataContext将为您缓存实体并从缓存中重新查询它,这样您只需访问数据库一次。但这不是一个典型的方案。

这取决于您在数据层中使用的技术。
例如,如果将Linq2Sql与单个DataContext一起使用,DataContext将为您缓存实体并从缓存中重新查询它,这样您只需访问数据库一次。但这不是一个典型的方案。

您运行代码了吗?怎么搞的?不管怎样,这都是你的答案。当你有一个问题不能简单地通过运行问题中的代码来回答时,请发布它。例如,假设您想要更改行为或修复它。但是你不需要我们告诉你你的代码是做什么的,运行它应该做到这一点。这就是我问的原因。你运行代码了吗?怎么搞的?不管怎样,这都是你的答案。当你有一个问题不能简单地通过运行问题中的代码来回答时,请发布它。例如,假设您想要更改行为或修复它。但是你不需要我们告诉你你的代码是做什么的,运行它应该做到这一点。这就是我问的原因。编写getter的更简洁的方法是
return\u myProperty??(_myProperty=SomeClass.GetCollectionOfThese(someId))
ah是的,有没有机会使用null coalesce,我接受;)编写getter的更简洁的方法是
return\u myProperty??(_myProperty=SomeClass.GetCollectionOfThese(someId))
ah是的,有没有机会使用null coalesce,我接受;)