C# - 无法在我的项目中使用反射?

时间:2015-10-01 03:33:14

标签: c# system.reflection

所以这是我正在尝试做的一个例子:

//main.cs
using System;

class Program {
    static string myString = "Hello world";
}

//example.cs
using System;

public class DoStuff {
   public static void ShowVariable() {
     Console.WriteLine(this.GetType().GetField("_datafile").GetValue(this));
   }
}

期望的输出:

  

Hello world

我需要做什么?我完全不知道。是的,我已经在这个网站上查看了有关反思的问题,但我只是不明白!我可以替换什么,以便无论我传入“_datafile”,即使它是一个变量作为字符串(例如用户名而不是“用户名”),它将显示该变量?

谢谢。

4 个答案:

答案 0 :(得分:1)

如果我的问题是对的,你想要这个:

public static void ShowVariable() {
    Console.WriteLine(typeof(Program).GetField("myString", BindingFlags.Static | BindingFlags.NonPublic).GetValue(this));

此处代码采用myString类中的静态Program字段。

答案 1 :(得分:0)

GetField方法返回在其调用的Type中定义的FieldInfo。字符串参数是字段的名称。所以如果你有:

public string myString = "something";

你会调用

GetField("myString");

请注意,GetField(String)仅返回公共字段。要获取其他类型的字段,必须使用GetField(String,BindingFlags)方法。有关这些方法的更多信息here

答案 2 :(得分:0)

这个类与'hello world'无关。我想你想检查另一个类,即使这样,你调用的字段名是_datafile,它不是“myString”,它包含“Hello world” “......我有点困惑......

//example.cs
using System;

public class DoStuff {
public static void ShowVariable() {
Console.WriteLine(this.GetType().GetField("_datafile").GetValue(this));


//Desired output:
//Hello world

}

}

我的例子有效..

 public class DoStuff
    {
        public string _datafile = "hello world";
        public void ShowVariable()
        {
            Console.WriteLine(this.GetType().GetField("_datafile").GetValue(this));


            //Desired output:
            //Hello world

        }

    }

    class Program
    {

        static void Main(string[] args)
        {
            new DoStuff().ShowVariable();
            Console.ReadLine();
        }
}

答案 3 :(得分:0)

根据您的问题,您试图在另一个班级private中获取班级static的{​​{1}} myString字段Program的值。如果您正在尝试这样做,那么这就是您在DoStuff类中所需要的(您可以将整个语句写在一行中)

DoStuff