在类运行时设置数组值(并将属性设置到它们上)?

时间:2018-03-29 20:53:34

标签: c#

我无法定义这个问题的名称,因此尝试谷歌和这里,但无法找到。

有没有办法在属性级别设置数组(或字典)成员值,并将属性设置到它们上?像这样:

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";  

}

3 个答案:

答案 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