说我有List<Objects>
。我想在一个方法中定义对象列表,并在其他几个方法中使用它们。
以下是我提出的方法,我正在寻找更多或正确的方法。
List<Objects>
。
List<Objects>
并使用(ref ListObjects)
进行更新
List<Objects>
作为参数传递给使用它的方法。
这就是我想出来的。我真的不确定使用哪个或者有更好的方法来做到这一点。想法?
编辑:根据要求包含一些代码。
private List<MedicalPlan> medicalPlansList;
这是清单。它是一个从数据库中获取信息的列表,在这里:
private void BindMedicalList()
{
medicalPlansList = new MedicalPlanRepository().RetrieveAll().Where(x => x.Year == year).ToList();
}
然后它用于查找该列表中的对象,例如
var result =
medicalPlansList.FirstOrDefault(
c => c.CoverageLevels.Any(p => p.Id == id));
答案 0 :(得分:2)
一般来说,这是我怎么做的。如果始终在列表中使用相同的函数序列,请考虑创建一个链式函数来处理它。你也可以在其他一个函数调用中直接传递一个函数调用(只要它返回一个列表),但这看起来很麻烦。
public List<int> DoSomethingWithList(List<int> list)
{
//do stuff
return list;
}
public List<int> DoSomethingElseWithList(List<int> list)
{
//do other stuff
return list;
}
public void SomeOtherFunction(string[] args)
{
var list = new List<int>() { 1, 2, 3, 4 }; //create list
list = DoSomethingWithList(list); //change list
list = DoSomethingElseWithList(list); //change list further
}
如果您正在使用具有List<T>
字段的对象,我会这样做:
public class MyBigClass
{
private List<int> myList;
public MyBigClass()
{
//instantiate list in constructor
myList = new List<int>() { 1, 2, 3, 4 };
}
public void PublicListAdder(int val)
{
myList.Add(val);
}
private void PrivateListCleaner()
{
//remove all even numbers, just an example
myList.RemoveAll(x => x % 2 == 0);
}
}
您很少需要在C#中使用ref
,因为它会自动为您处理指针。你(通常)没有传递一个结构,你传递一个对象引用(基本上是一个指针)。
答案 1 :(得分:0)
你的#1和#2真的没有意义:
ref ListObjects
来更新私人会员;私人成员只是通过其名称访问。这不是坏习惯;这是标准的面向对象实践。简而言之:#3在某种程度上是良好的做法,因为它增加了代码的可重用性。但是,#2的使用从根本上说是我们进行面向对象编程的原因:保存您不必重复将参数传递给所有方法。这正是私人领域的设计目标!
答案 2 :(得分:0)
在大多数情况下,我可能会选择安德斯的回答。根据您的情况,另一种值得考虑的方法是为List编写extension methods。
namespace ExtensionMethods
{
public static class MyExtensions
{
public static object DoSomething(this List<T> list)
{
//do the something with list
}
}
}
然后你可以这样使用它:
var list = new List<int>();
list.DoSomething();
在该示例中,list
作为参数传递给扩展方法。
答案 3 :(得分:-1)
通常List<T>
不应该属于实例的状态并且因为它是可变的而暴露,并且你可以从外部改变状态,否则你的getter被设计为返回一个只读列表。除非您的设计在可能发生时明确允许这种可能性。我的回答并没有真正回答你的问题只是一个良好的面向对象设计的建议。正如某人已经建议的要好得多,你可以在每个方法中来回传递List并直接修改它。