我无法定义这个问题的名称,因此尝试谷歌和这里,但无法找到。
有没有办法在属性级别设置数组(或字典)成员值,并将属性设置到它们上?像这样:
public class XYZ{
private string[] x= new string[]{"smth", "smth"};
x[0] { get; set; }
[Receipt(order=2, name="warranty")]
x[1] { get; set; }
....
}
所以,主要是我要问坦率的问题:
1)是否可以将属性设置为数组成员?
2)是否可以(忘记属性)在属性级别(不在方法内)为数组成员赋值,这样?:
public class XYZ{
private string[] x= new string[2]();
x[0] = "smth";
}
答案 0 :(得分:3)
答案肯定是 否 。属性只能添加到编译时功能,例如类和方法。而不是对象数据等运行时功能。
你的getter / setter语法也是非常错误的,它只能是这样的:
public int Month { get; set; }
所以访问修饰符(公共;可选),然后是类型( int ),其次是通过名称(月),然后是获取和/或设置规范。
答案 1 :(得分:1)
你无法按照自己的方式做到这一点,但你可以近距离接触:
public class XYZ
{
private string[] x= new string[]{"smth", "smth"};
[Receipt(order=1, name="warranty")]
public string Receipt1 {get { return x[0];} set{x[0] = value;} }
[Receipt(order=2, name="warranty")]
public string Receipt2 {get { return x[1];} set{x[1] = value;} }
//...
}
当然,此处的条目数是固定的,您必须为这些属性提供真实有意义的名称。在程序运行时,您不能拥有动态数量的条目。
您可以看到的另一件事是indexer property。使用索引器,您只能在整个属性上设置一次属性,而不是单个元素,但它将允许在运行时更改项目数。
答案 2 :(得分:1)
简短的回答是否定的。属性用于元数据,这看起来像实际数据。可能你应该让你的数组是某个类的数组,其中包含你想要在ReceiptAttribute
中拥有的值(即smth)和所有数据。
类似于:
public class Receipt
{
public string Value {get; set;}
public int Order {get; set;}
public string Name {get; set;}
}
然后:
public class XYZ
{
private Receipt[] x= new Receipt[]
{
new Receipt() { Value = "smth", Order = 1, Name = "warranty" },
new Receipt() { Value = "smth", Order = 2, Name = "warranty" },
};
}
而且,显然,当你想要这个价值时,你会做类似的事情:
x[0].Value