C#通过动态格式化变量的名称来调用变量

本文关键字:变量 调用 动态 格式化 | 更新日期: 2023-09-27 18:25:24

我在datagridview中有12列(它们是v1-v12中的12个属性)。有可能创建一个动态系统来做这样的事情吗:

int i = 5;
var variablename = "v" + i;
String content = product.variablename;

这将是的通用功能

if(i == 5) {
    content = product.v5
}

是的,我知道将我的属性命名为v1-v12不是一个好的做法,但它有它的用途。我可以写12个if子句,但我只是想知道这是否可能。

编辑:

在具体的例子中,我有一个8000个产品的数组,每个产品都有v1-v12属性。我想动态地获取特定单元格的值,所以product[行]。(v+列)应该变成产品[23].v5。

这更多的是一个例子,而不是实际需要的,只是想弄清楚是否可以做到。

C#通过动态格式化变量的名称来调用变量

Dictionary将为您提供灵活性和控制,让您可以随心所欲地存储和检索它们,而无需使用反射等。

var values = new Dictionary<string, string>();
values.Add("v" + i, "somevalue");

并检索:

var storedValue = values["v" + i];

附带说明一下,如果您使用数据网格视图来显示多行。您也可以使用DataTable来存储信息。或者,如果您有一个固定的结构,为什么不创建一个表示该信息的类,并使用List<T>

var variablename = "v" + i;
MethodInfo method = product.GetType().GetMethod(variablename);
object result = method.Invoke(product, new object[] {}); // pass in the parameters if you need to

您可以为此目的使用反射

那么你有一个类Product,它有12个没有Usefull名称的属性?在这种情况下,我只需要创建一个具有属性数组的类Product。

public class Product
{
   public string[] Properties {get;set;}
}

然后访问您调用的产品23的5t通用无名称属性。

products[23].Properties[5]

虽然我仍然怀疑产品的属性不能正确命名。