C# 使用字符串作为GetValue()的参数

C# 使用字符串作为GetValue()的参数,c#,xml,C#,Xml,我有一个类Player,这个类的一个实例叫做Player。在该类中,我有一个名为Name的自动属性 我需要从实例访问属性名称。我已经知道其他方法可以做到这一点,但由于我想让这个程序做什么,我需要通过: var type= Type.GetType("GameSpace.Player") var property = type.GetProperty("Name"); var propVal = property.GetValue(player); Console.WriteLine(propV

我有一个类Player,这个类的一个实例叫做Player。在该类中,我有一个名为Name的自动属性

我需要从实例访问属性名称。我已经知道其他方法可以做到这一点,但由于我想让这个程序做什么,我需要通过:

var type= Type.GetType("GameSpace.Player")
var property = type.GetProperty("Name");
var propVal = property.GetValue(player);

Console.WriteLine(propVal);
这段代码运行得非常好。这里的问题是,有时,我需要更改实例的名称,在本例中是player。我想制作一个字符串来保存实例的名称

string instanceName = "player";
enter code here
var type= Type.GetType("GameSpace.Player")
var property = type.GetProperty("Name");
var propVal = property.GetValue(instanceName);

Console.WriteLine(propVal);
但这不起作用,抛出一个错误,即GetValue没有允许字符串值的重载

有没有办法实现我的要求。我知道我可以简单地执行Console.WriteLineplayer.Name,但在本例中,这不是一个选项,主要是因为实例的参数名称存储在XML文件中

编辑1: 错误消息:


实例通常没有名称。您可以使用Name属性创建一个类,但框架并不关心这个问题。必须传递给PropertyInfo.GetValue的值是对要获取其属性的对象的引用。传递名称对框架没有意义。除此之外,它没有上下文——在各种地方都可能有许多同名的变量

变量有名称。如果你得到的名字是指一个局部变量,你就不走运了——但是如果你得到的名字是指一个字段,你可以通过反射得到这个字段。获取正确的FieldInfo,然后获取其值

但是,最好是使用字典将可能在XML文件中遇到的名称映射到要获取属性的适当对象中。或者,您可以使用switch语句来获取正确的值—这实际上取决于上下文


一般来说,将类实现字段名绑定到XML文件是一个坏主意,我想。

您看过PropertyInfo.GetValue的文档了吗?我看过@JonSkeet,它说它只支持对象[]作为参数值。不确定这是什么意思。请注意,对于较新版本的.NET有更多的重载-如果您以.NET4.5为目标,我认为应该已经编译了。您的目标是.NET的哪个版本?如果您只有两个参数版本可用,那么您需要传递两个参数-请参阅文档,了解您希望传递的第二个参数。我发现它可以将对象作为参数@JonSkeet保存,但当我尝试我的问题中的代码时,它无法按预期工作。我不知道为什么你确定这不能编译?如果第一个版本可以编译,我希望第二个版本可以编译但不能运行。请显示准确的错误消息。我对字典不太熟悉,但它的工作原理是否像如果我的XML字符串在字典中,它会吐出一个对象?比如,如果你在字典里查找一个单词,它会给出一个定义?@AhkamNihardeen:嗯,你需要填充它,但是是的,它是从键到值的映射。如果你是C和.NET新手,我假设你是,因为Dictionary是一种非常常用的类型,我强烈建议你先学习平台的核心类型,尤其是集合类,然后再开始处理反射,反射是相对高级的。因此我可以将所有可能的选项存储在字符串中,然后简单地让字典吐出所需的对象。然后,我可以在GetValue中使用object,对吗?@AhkamNihardeen:我不知道你所说的存储在字符串中的所有可能选项是什么意思-你应该将它们存储在字典中。我建议您在这里找到一个关于.NET集合的好教程,然后试试。我的意思是,在字典的字符串部分?