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。
这更多的是一个例子,而不是实际需要的,只是想弄清楚是否可以做到。
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]
虽然我仍然怀疑产品的属性不能正确命名。