这是目标。能够将ConvertLength与ref参数和AutoGenerateColumns一起使用。但据我所知,字段(“b”)不能用于生成列,属性(“c”)不能用作引用。有解决方案吗?
class A
{
public decimal b;
public decimal c { get ; set ; }
}
void ConvertLength(ref decimal field)
{
field = field * 2.0m;
}
class x : Form
{
DataGridView dgv = new DataGridView();
a[] rows = new a[5];
ConvertLength(ref a[0].b);
ConvertLength(ref a[0].c);
dgv.AutoGenerateColumns = true;
dgv.DataSource = rows;
}
答案 0 :(得分:2)
来自MSDN:
属性不是变量。它们是方法,不能传递给
ref
参数。
因此,您无法将A.c
传递给ConvertLength
。您可以通过b
,但请注意您必须使用ref
关键字:
ConvertLength(ref a[0].b);
请注意,b
也必须可以访问x
类(例如public
或internal
如果x
位于同一个程序集中)。此外,您的ConvertLength
方法需要使用2.0m
作为十进制文字,而不是2.0
这是一个双倍。
您几乎不需要使用ref
参数,如果您使用它们,它通常表示其他问题(即code smell)。如果是我,我会遵循@Tbid的建议,如下:
decimal ConvertLength(decimal field) => field * 2.0m;
...
a[0].b = ConvertLength(a[0].b);
a[0].c = ConvertLength(a[0].c); // works with properties or fields.
但是如果真的需要为了ref
而为了AutoGenerateColumns
参数和属性而拥有一个包含字段的类,那么你总是可以这样做:
class A
{
public decimal b_field;
public decimal b { get { return b_field; } set { b_field = value; } }
public decimal c_field
public decimal c { get { return c_field; } set { c_field = value; } }
}
...
ConvertLength(ref a[0].b_field);
ConvertLength(ref a[0].c_field);