C# 数组作为类属性

本文关键字:属性 数组 | 更新日期: 2023-09-27 18:32:26

我搜索了很多,但找不到任何解决方案。我可能使用了错误的关键字。我有一个类,它基本上是ListView控件的扩展版本。

我为我的自定义列表视图定义了一些自定义属性,例如文件名、订单类型等,它们工作正常。

我还想将一个数组传递给我的类,其中包含 ColumnNames 以填充类中的数据。

MyListView课堂上

public class ColumnNames : Attribute
{
    public string[] Values { get; set; }
    public ColumnNames(params string[] values)
    {
        this.Values = values;
    }
}
[ColumnNames("a1","a2","a3","a4","a5","a6","a7","a8","a9")]
public MyListView() {
     for (int i = 0; i < 7; i++)
            this.Columns.Add(this.ColumnNames[i]);
    }

Form1课堂上

MyListView lstv = new MyListView();
lstv.ColumnNames[0] = "hede1";
lstv.ColumnNames[1] = "hede2";
lstv.ColumnNames[2] = "hede3";

编辑:我根本无法实现我想要的。你能给我看一个工作的例子吗?

我使用此列表视图来显示从数据库中获取的信息。(我使用ListView而不是DataGrid)我想将列名传递给这个类,它将用于SQL查询"SELECT xxxxx,yyyyy,zzzz FROM table;"和列名this.columns.add("xxxxx");this.columns.add("yyyyy");this.columns.add("zzzzz");

C# 数组作为类属性

如果你想坚持这个属性,你可以像这样访问它的数据:

var attributes = this.GetType().GetCustomAttributes(typeof(ColumnNames), false);
foreach (var attr in attributes)
{
    var a = attr as ColumnNames;
    foreach (var column in a.Values)
    {
        this.Columns.Add(column);
    }
}

在初始化控件之前,在类构造函数中添加列。尝试重写 OnLoad 事件并在那里执行此操作:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    foreach (var columnName in this.ColumnNames)
        this.Columns.Add(columnName);
}

我认为您误解了属性的目的。 属性描述成员或类,但似乎试图像继承一样使用它。

也许这就是您正在寻找的:

public class MyListView{
   public string[] ColumnNames {get; set;}
}