C# 动态访问类中的字段

C# 动态访问类中的字段,c#,.net-4.0,system.reflection,C#,.net 4.0,System.reflection,这里有一段代码,我试图将类实例中的每个字段保存到一个单独的文件中。我把它都写出来了,但有些地方看起来不对劲。问题是它没有引用包含数据的实例,而只是引用类型。这在我看来并不完全正确。我正在使用System.Reflection。现在,如何引用该实例?或者我已经不知道了。这是我的密码: public static void Save(appData data) { string filename; // this does not accept the variable "data"

这里有一段代码,我试图将类实例中的每个字段保存到一个单独的文件中。我把它都写出来了,但有些地方看起来不对劲。问题是它没有引用包含数据的实例,而只是引用类型。这在我看来并不完全正确。我正在使用System.Reflection。现在,如何引用该实例?或者我已经不知道了。这是我的密码:

public static void Save(appData data)
{
    string filename;
    // this does not accept the variable "data", only the class spec "appData"
    var fields = typeof(appData).GetFields(BindingFlags.Instance);
    foreach (FieldInfo field in fields)
    {
        try
        {
            filename = (string)field.GetValue("dataFile");
        }
        catch (Exception e)
        {

            Console.WriteLine(e.Message);
            Console.ReadLine();
        }
        dataStream = new FileStream(filename,
            FileMode.Truncate, FileAccess.Write,
            FileShare.Read);
        serial.Serialize(dataStream, field );
        dataStream.Flush();
        dataStream.Close();
        dataStream = null;
    }

}

虽然您的代码不完整,但我想我可以告诉您要做什么

您的示例实际上是序列化
FieldInfo
对象,而不是字段。您要替换:

filename=(string)field.GetValue(“数据文件”)

与:

filename=field.Name

还应替换:

serial.Serialize(数据流,字段)

与:

serial.Serialize(数据流,字段.GetValue(数据);

只需确保所有字段都能被
串行对象序列化。

您没有正确调用。它的参数应该是要提取其字段值的对象,或者对于静态字段为null

也许你正试图通过以下方式实现:

filename = (string)field.GetValue("dataFile");
这是(假设数据是感兴趣的实例)


您的代码看起来不完整:
serial.Serialize(dataStream,);
无效。在那里,已修复。这是否使它变得更清晰?:)
serial
看起来不像是已定义的。您可以显示类型
appData
的定义吗?看起来您正在尝试获取appData实例的“dataFile”成员的值。它是防止您直接访问它的私有字段吗?否,datafile变量是appData中每个字段都包含的字段,并且未序列化。它是在初始化appData或反序列化字段时分配的。它只是该字段的数据文件的文件路径。是的,它是公开的。此外,serial是一个二进制格式化程序。在这种情况下,他应该调用而不是GetValue方法。这非常有效。我对它做了一点修改,但是
getvalue
正是我想要的。
if (field.Name == "dataFile")
{
    filename = (string)field.GetValue(data);
}