自定义类型的 GetEnumerator 错误
GetEnumerator Error with Custom Type
我有以下 Class...
class gridRecord
{
//Constructor
public gridRecord()
{
Quantity = new quantityField();
Title = new titleField();
Pages = new pagesField();
}
private quantityField quantity;
private titleField title;
private pagesField pages;
internal quantityField Quantity
{
get { return quantity; }
set { quantity = value; }
}
internal titleField Title
{
get { return title; }
set { title = value; }
}
internal pagesField Pages
{
get { return pages; }
set { pages = value; }
}
}
我希望能够将每个字段的名称作为字符串获取,这样我以后就可以创建一个数据表而不必指定每一列。
List<gridRecord> lgr = new List<gridRecord>();
lgr = populatedList();
foreach(gridField gf in lgr[0])
MessageBox.Show(gf.ToString());
但是我得到这个错误:
Error 1 foreach statement cannot operate on variables of type
'XML__Console.gridRecord' because 'XML__Console.gridRecord' does not
contain a public definition for 'GetEnumerator'
我假设我需要继承表单和界面之类的东西,但不确定如何继承或继承哪一个。
已添加网格字段...
class gridField : Validateit
{
public gridField()
{
Value = "---";
isValid = false;
message = "";
}
private string value;
protected bool isValid;
private string message;
public string Value
{
get { return this.value; }
set { this.value = value; }
}
public bool IsValid
{
get { return isValid; }
set { isValid = value; }
}
public string Message
{
get { return message; }
set { message = value; }
}
public override void Validate()
{
}
}
下面添加的quantityField其他字段大同小异
class quantityField : gridField
{
public void validate()
{
if (isQuantityValid(Value) == false) { Value = "Invalid";}
}
public static bool isQuantityValid(string quantity)
{
if (quantity.Length > 3)
{
return true;
}
else
{
return false;
}
}
}
您正在尝试迭代集合中的一个元素。
foreach(gridField gf in lgr[0])
{
MessageBox.Show(gf.ToString());
}
如果您的目标是检索 class 中每个 属性 的名称,那么请执行此操作。
PropertyInfo[] props = typeof(gridRecord).GetProperties();
foreach(PropertyInfo prop in props)
{
object[] attrs = prop.GetCustomAttributes(true);
foreach(object attr in attrs)
{
AuthorAttribute authAttr = attr as AuthorAttribute;
if (authAttr != null)
{
string propName = prop.Name;
string auth = authAttr.Name;
}
}
}
据我了解,您想从 gridRecord
class 中获取属性的名称(根据您的示例:"Quantity"、"Title"、"Pages")?
为此,您需要使用反射:
var properties = typeof(gridRecord).GetProperties();
foreach (PropertyInfo propInfo in properties) {
MessageBox.Show(propInfo.Name);
}
如果您想获取每个字段的名称,您应该使用 reflection。
PropertyInfo class 应该会有帮助
我有以下 Class...
class gridRecord
{
//Constructor
public gridRecord()
{
Quantity = new quantityField();
Title = new titleField();
Pages = new pagesField();
}
private quantityField quantity;
private titleField title;
private pagesField pages;
internal quantityField Quantity
{
get { return quantity; }
set { quantity = value; }
}
internal titleField Title
{
get { return title; }
set { title = value; }
}
internal pagesField Pages
{
get { return pages; }
set { pages = value; }
}
}
我希望能够将每个字段的名称作为字符串获取,这样我以后就可以创建一个数据表而不必指定每一列。
List<gridRecord> lgr = new List<gridRecord>();
lgr = populatedList();
foreach(gridField gf in lgr[0])
MessageBox.Show(gf.ToString());
但是我得到这个错误:
Error 1 foreach statement cannot operate on variables of type 'XML__Console.gridRecord' because 'XML__Console.gridRecord' does not contain a public definition for 'GetEnumerator'
我假设我需要继承表单和界面之类的东西,但不确定如何继承或继承哪一个。
已添加网格字段...
class gridField : Validateit
{
public gridField()
{
Value = "---";
isValid = false;
message = "";
}
private string value;
protected bool isValid;
private string message;
public string Value
{
get { return this.value; }
set { this.value = value; }
}
public bool IsValid
{
get { return isValid; }
set { isValid = value; }
}
public string Message
{
get { return message; }
set { message = value; }
}
public override void Validate()
{
}
}
下面添加的quantityField其他字段大同小异
class quantityField : gridField
{
public void validate()
{
if (isQuantityValid(Value) == false) { Value = "Invalid";}
}
public static bool isQuantityValid(string quantity)
{
if (quantity.Length > 3)
{
return true;
}
else
{
return false;
}
}
}
您正在尝试迭代集合中的一个元素。
foreach(gridField gf in lgr[0])
{
MessageBox.Show(gf.ToString());
}
如果您的目标是检索 class 中每个 属性 的名称,那么请执行此操作。
PropertyInfo[] props = typeof(gridRecord).GetProperties();
foreach(PropertyInfo prop in props)
{
object[] attrs = prop.GetCustomAttributes(true);
foreach(object attr in attrs)
{
AuthorAttribute authAttr = attr as AuthorAttribute;
if (authAttr != null)
{
string propName = prop.Name;
string auth = authAttr.Name;
}
}
}
据我了解,您想从 gridRecord
class 中获取属性的名称(根据您的示例:"Quantity"、"Title"、"Pages")?
为此,您需要使用反射:
var properties = typeof(gridRecord).GetProperties();
foreach (PropertyInfo propInfo in properties) {
MessageBox.Show(propInfo.Name);
}
如果您想获取每个字段的名称,您应该使用 reflection。
PropertyInfo class 应该会有帮助