【发布时间】:2018-02-28 07:40:22
【问题描述】:
主类:
public class Main
{
private string param;
public Main(string param) { this.param = param; }
public List<Foo> Foos
{
get {return GetFoos();}
// add functionality of saving Foo (single item, not the whole list) here?
}
private List<Foo> GetFoos()
{
List<Foo> x = new List<Foo>();
return x;
}
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
// or maybe here?
}
}
测试类:
public class Test
{
public Test()
{
var main = new Main("hi!");
// usage 1
main.Foos.Find(p => p.Id == 1).Save(); // method visible here
var foo = new Main.Foo();
// usage 2
foo.Save(); // method not visible here
}
}
代码中的注释基本上说明了一切:
1.我要实现对象Foo的Save()方法。
2. 方法只能在从列表中取出 Foo 对象时调用(用法1)。
3.方法不能从单独创建的Foo对象调用(用法2)。
4. 方法必须使用主类初始化时传递的属性param的私有值。
【问题讨论】:
-
好吧,
main.Foo.Find(p => p.Id == 1).Save()在Foo对象上调用Save方法,就像foo.Save()一样。如果我理解正确,您正在寻找类似List.CurrentItem属性或List.SaveCurrent方法的东西,对吧?我会尝试想出一个可能的解决方案。 -
Save()函数可以在Foo类中定义,但它应该在Main类中以某种方式重载。如果我创建此类Foo的新实例,我不想看到她。 -
好的,我知道你的意思,但是调用
main.Foo.Find(p => p.Id == 1)会给你一个Foo对象。如果只有List.Find的方式可以按照您希望的方式工作,是否可以接受?还是您希望它适用于所有“从列表中挑选项目”的情况? -
我想使用所有方法在列表中搜索特定对象。一旦我有一个对象,我可以打电话给
Save ()。像这样:var find = main.Foos.FindLast(p => p.Id == 1); find.Save();这样做的原因是在Save ()方法中我要使用param,在Main类的初始化过程中传递了一次。