我在一个班级中有一组13个属性。我为这些属性创建了一个结构,并将其传递给另一个类。
我需要添加这13个属性中的另外10组。总共有130处房产。
我该怎么办?
1.我可以将所有130个属性添加到结构中。这会影响性能和可读性吗
2.我可以创建一个结构列表但不知道如何访问一个项目 例如。 添加到列表中:
listRowItems.Add(new RowItems(){a = 1,b = 1,c = 1,d = 1 ...});
listRowItems.Add(new RowItems(){a = 2,b = 2,c = 2,d = 2 ...});
如何访问第二组项b?
3.我可以只使用包含130个项目的词典
4.我应该使用词典列表(再次我不知道如何访问某个特定项目)
5.我应该通过一类130个属性
为了您的兴趣,属性是用于复合控件的css参数。该控件在每行中显示13个元素,共有10行,每行可自定义。
答案 0 :(得分:2)
为什么不将类的实例传递给另一个类?我不清楚为什么属性需要在另一个数据结构中。如果要限制其他类可以访问的属性,可以定义接口并在类A上实现它,然后在接收类B作为接口类型的方法中键入参数。
答案 1 :(得分:0)
如何访问第二个组项目 B'
用整数索引。
RowItems rowItems = list[index];
无论您做什么,都不要扩展类或结构以获得更多属性,除非这些属性与特定项相关。如果该项有13个属性来描述它,那么class / struct也应如此。如果需要描述多个项目,请使用多个对象,例如List集合。
答案 2 :(得分:0)
要访问第二个项目的b属性,只需:
listRowItems[1].b
老实说,虽然这看起来很复杂。目前尚不清楚究竟是什么代表了你所做的实际CSS,但我只想在主要属性上使用由row索引的字典。您不应该创建新的类或结构来简单地表示另一个类的属性,除非它们属于逻辑子类(与使用嵌套类相同的指导原则)。
答案 3 :(得分:0)
如果要按索引号访问10行,请传递结构的通用列表:
public void DoIt(System.Collections.Generic.List<MyPropertyStruct> list) {
var thirdItem = list[2];
}
如果您需要通过某种键访问10行,请使用通用词典:
public void DoIt(System.Collections.Generic.Dictionary<string, MyPropertyStruct> d) {
var sallyItem = d["sally"];
}
答案 4 :(得分:0)
只是为了您对这些物业的兴趣 是用于a的css参数 复合控制。控制 每行显示13个元素 有10行,每行是 可定制的。
我会用这样的东西:
public class ControlElement{}
public class ControlRow
{
public Dictionary<string, ControlElement> Elements
{
get;
set;
}
}
public class Control
{
public List<ControlRow> Rows
{
get;
set;
}
}
答案 5 :(得分:0)
那样的东西?
class StyleDefinition
{
public string Property { get; set; }
public string Value { get; set; }
public StyleDefinition(string p, string v)
{
Property = p;
Value = v;
}
}
class Cell {
public List<StyleDefinition> Styles { get; set; }
public string Value { get; set; }
}
class CellBuilder
{
public Cell CreateCell(List<StyleDefinition> styles, string value)
{
return new Cell { Styles = styles, Value = value };
}
public List<Cell> CreateRow(Dictionary<int, List<StyleDefinition>> styles, IEnumerable<string> values)
{
var res = new List<Cell>();
var it = values.GetEnumerator();
foreach( var kp in styles) {
// logic for cell with key = kp.Key
res.Add(CreateCell(kp.Value, it.Current));
it.MoveNext();
}
return res;
}
public List<List<Cell>> CreateTable(Dictionary<int, Dictionary<int, List<StyleDefinition>>> styles, IEnumerable<IEnumerable<string>> values)
{
var res = new List<List<Cell>>();
var it = values.GetEnumerator();
foreach (var kp in styles)
{
res.Add(CreateRow(kp.Value, it.Current));
it.MoveNext();
}
return res;
}
}