Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#反映属性或其他成员类型_C#_Class_Reflection_Properties - Fatal编程技术网

c#反映属性或其他成员类型

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

我正在使用一个名为filehelpers的工具,它为文件导入定义了一个动态类。类文件可能如下所示:

[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听起来很棒。谢谢,我还没看过这些,但会看看的。谢谢:)我还没有看过这些,但会看看的。谢谢:)