有没有办法将表定义为行集合,并根据行的属性自动填充表中的属性(列)?
例如:
public class Foobar {
public int TheNumber;
public string TheString;
}
public class SomeFoobars : List<Foobar> {
public List<int> TheNumber {
get { return Select(foo => foo.TheNumber); }
set { for (int i = 0; i < Count; i++) { this[i].TheNumber = value[i]; }
}
public List<int> TheString {
get { return Select(foo => foo.TheString ); }
set { for (int i = 0; i < Count; i++) { this[i].TheString = value[i]; }
}
}
// So I can now do things like:
SomeFoobars myFoobars = ReturnsListOfFoobar();
MethodThatTakesListOfInt( myFoobars.TheNumbers );
myFoobars.TheString = SomeMethodThatReturnsListOfString();
如果您只需要执行一次,那么创建集合类实现并不是那么糟糕,但我希望为任何类型的行都具有此功能,而不必反复编写集合属性。除了对包含类的特定属性的引用(即上例中的TheNumber
或TheString
)之外,这些属性方法基本相同。
有没有办法实现这个目标?也许用反射?
答案 0 :(得分:0)
我建议你回去修改你的设计。你现在可能已经意识到,这给你带来了很多麻烦。
如果您仍然决定保留当前套件,可以删除int main()
{
std::string key = "012#txt1#txt2#txt3#txt4# #some other text:";
std::string temp = key;
size_t found = 0;
size_t pos_key = temp.find('#');
while((found != 5) && (pos_key != std::string::npos))
{
found++;
// this line does nothing with the found position
// temp.find_first_of('#', pos_key + 1);
// instead record the position of the latest '#'
pos_key = temp.find_first_of('#', pos_key + 1);
// this line just deletes most of the string
// for no apparent reason
// temp.erase(0, pos_key);
}
std::cout << " the pos key is " << pos_key << std::endl;
}
上的属性,并以这种方式执行相同的操作:
SomeFoobars