非静态字段,方法或属性'object.GetType()'需要对象引用

时间:2015-12-26 03:27:27

标签: c#

我遇到了这种错误:

  

非静态字段,方法或属性'object.GetType()'

需要对象引用
XmlSerializer rd = new XmlSerializer(Roll.GetType())

类:

  public class Roll
{
    public int Code = 0;
    public string Name = "";
    public DateTime Date = DateTime.MinValue;
}

如果您需要更多信息,请告诉我。

谢谢

3 个答案:

答案 0 :(得分:3)

实际上,这意味着您应该使用typeof(Roll)而不是Roll.GetType()。即,

XmlSerializer rd = new XmlSerializer(typeof(Roll));

Techincally,这意味着Roll是一个类,GetType()是该类的有效实例方法(通过继承),但它不是有效的静态方法。因此,如果myRoll.GetType()myRoll类型的对象实例,则可以调用Roll,但无法调用Roll.GetType()

答案 1 :(得分:1)

这意味着为了在GetType()上调用(即调用)Roll方法,您需要一个Roll类型的对象实例,因为GetType()方法不是静态方法。

正如其他人所说,使用typeof如下。

XmlSerializer rd = new XmlSerializer(typeof(Roll));

您是否尝试将Roll个实例序列化为文件或其他内容 ?如果是,请尝试以下示例。

例如:

private void SerializeRoll(string filename)
{
    XmlSerializer rd = new XmlSerializer(typeof(Roll));

    // Instantiate Roll, fill it with data.
    Roll oneRoll = new Roll();
    oneRoll.Code = 1;
    oneRoll.Name = "Test Code"; 

    TextWriter writer = new StreamWriter(filename);
    ser.Serialize(writer, oneRoll );
    writer.Close();
}

答案 2 :(得分:1)

您希望将Type类的Roll对象传递给XmlSerializer构造函数,但是您正在使用GetType()函数,这是一个实例方法而不是静态方法。需要从对象调用实例方法,而不是静态方法,可以从类本身调用。

为了做到你想要的,没有Roll类型的对象,请使用

XmlSerializer rd = new XmlSerializer(typeof(Roll));

typeof运算符返回一个Type对象,描述作为参数传递的类。