c#反映属性或其他成员类型
我正在使用一个名为filehelpers的工具,它为文件导入定义了一个动态类。类文件可能如下所示:c#反映属性或其他成员类型,c#,class,reflection,properties,C#,Class,Reflection,Properties,我正在使用一个名为filehelpers的工具,它为文件导入定义了一个动态类。类文件可能如下所示: [DelimitedRecord(",")] [IgnoreFirst(1)] public class TestNoPrimaryKey { [FieldConverter(ConverterKind.Decimal, ".")] [FieldQuoted()] public decimal Value; [FieldQuoted('"', QuoteMode.OptionalForRead
[DelimitedRecord(",")]
[IgnoreFirst(1)]
public class TestNoPrimaryKey
{
[FieldConverter(ConverterKind.Decimal, ".")]
[FieldQuoted()]
public decimal Value;
[FieldQuoted('"', QuoteMode.OptionalForRead, MultilineMode.AllowForRead)]
public String aString;
}
从我看到的代码中,这是正确创建的。接下来,我需要创建一个类似格式的datatable,以便执行SQL插入。通过上的善良帮助,我得到了以下代码,该代码接受类型(定义见上文),并声称为我生成类型化的datatable列:
public static DataTable TypeToEmptyDataTable(Type myType)
{
DataTable dt = new DataTable();
foreach (PropertyInfo info in myType.GetProperties())
{
dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));
}
return dt;
}
不幸的是,它找不到任何属性并返回一个没有列的datatable。现在我在想——如果你得到了;设置类中没有指定etc,可能它们本身不是“属性”。也许我需要的是getMembers?我试过了,但返回info.MemberType无效
关于如何从我的课堂中获取姓名/类型,有什么想法吗?我不相信我可以添加get/set,因为我正在使用的filehelpers工具需要这个类布局
谢谢 上面的代码中没有编写任何属性-您已经声明了字段。get
和set
确实产生了非常显著的差异:)
如果您想获取字段,只需使用GetFields
——但我建议您将它们设置为属性。属性在绑定等方面工作得更好,并且通常是封装的更好开端。您没有在上面的代码中编写任何属性-您已经声明了字段。get
和set
确实产生了非常显著的差异:)
如果您想获取字段,只需使用
GetFields
——但我建议您将它们设置为属性。属性在绑定等方面工作得更好,并且通常是封装的更好开端。这是对@Jon Skeet answer的补充……。
如下所示读取字段的值:
现在您正在读取类的属性而不是文件
Type type = typeof(ReflectionTest); // Get type pointer
FieldInfo[] fields = type.GetFields(); // Obtain all fields
foreach (var field in fields) // Loop through fields
{
///you code
}
这是对@Jon Skeet answer的补充……。 如下所示读取字段的值: 现在您正在读取类的属性而不是文件
Type type = typeof(ReflectionTest); // Get type pointer
FieldInfo[] fields = type.GetFields(); // Obtain all fields
foreach (var field in fields) // Loop through fields
{
///you code
}
使用带有绑定标志的get字段
myType.GetFields(System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.FlattenHierarchy |
System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.GetProperty);
使用带有绑定标志的get字段
myType.GetFields(System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.FlattenHierarchy |
System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.GetProperty);
太好了,非常感谢乔恩。如果我正常使用这个类,我当然会使用属性,但是因为它在本例中的用途几乎是一个文件定义,所以getfields听起来很棒。干杯,谢谢你,乔恩。如果我正常使用这个类,我当然会使用属性,但是因为它在本例中的用途几乎是一个文件定义,所以getfields听起来很棒。谢谢,我还没看过这些,但会看看的。谢谢:)我还没有看过这些,但会看看的。谢谢:)