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

时间:2015-12-03 08:58:45

标签: c#

我在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条条款,但我只是想知道它是否可能。

编辑:

在具体示例中,我有一个包含每个v1-v12属性的8000个产品的数组。我想动态获取特定单元格的值,所以 产品[row]。(v + column)应该成为产品[23] .v5。

这是一个案例,而不是实际需要,只是想知道是否可以完成。

3 个答案:

答案 0 :(得分:5)

字典将为您提供灵活性和控制权,可以存储任意数量的内容并在不使用反射等的情况下检索它们。

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

并检索它:

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

另外,如果您使用数据网格视图有多行。您还可以使用DataTable存储信息。或者,如果您有一个固定的结构,为什么不创建一个代表该信息的类并使用List<T>

答案 1 :(得分:1)

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

您可以将反射用于此目的

答案 2 :(得分:0)

所以你有一个类产品有12个属性没有有用的名字? 在这种情况下,我只会创建一个具有属性数组的类Product。

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

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

products[23].Properties[5]

虽然我仍然怀疑产品属性无法正确命名。