Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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#_.net_Reflection_C# 4.0_System.reflection - Fatal编程技术网

C# 通过反射获取对象

C# 通过反射获取对象,c#,.net,reflection,c#-4.0,system.reflection,C#,.net,Reflection,C# 4.0,System.reflection,我在寻找c#中的机制,其工作原理如下: Car car1; Car car2; Car car = (Car)SomeMechanism.Get("car1"); car1和car2是字段 所以我想得到一些具有反射的对象,而不是类型:/我如何在c#中实现它?看起来您正试图通过反射来访问局部变量。这是不可能的。反射无法访问局部变量。局部变量不可能访问,但如果有字段,则可以访问 class Foo{ public Car car1; public Car car2; } ob

我在寻找c#中的机制,其工作原理如下:

Car car1;
Car car2;

Car car = (Car)SomeMechanism.Get("car1");
car1和car2是字段


所以我想得到一些具有反射的对象,而不是类型:/我如何在c#中实现它?

看起来您正试图通过反射来访问局部变量。这是不可能的。反射无法访问局部变量。

局部变量不可能访问,但如果有字段,则可以访问

class Foo{

    public Car car1;
    public Car car2;
}
object fooInstance = ...;

Car car1 = (Car)fooInstance.GetType().GetField("car1").GetValue(fooInstance);
你能行

class Foo{

    public Car car1;
    public Car car2;
}
object fooInstance = ...;

Car car1 = (Car)fooInstance.GetType().GetField("car1").GetValue(fooInstance);

假设你有两个变量,你想动态地得到其中一个,对吗?我不相信你可以用反射来实现这一点(至少不容易),但是你可以用函数来实现它

// Declaration
class SomeMechanism
{
    public static T Get<T>(Func<T> getter);
}

// Usage
Car car1;
Car car2;

Car car = SomeMechanism.Get(() => car1);
//声明
类机制
{
公共静态T-Get(Func-getter);
}
//用法
小汽车1辆;
小汽车2辆;
Car Car=SomeMechanism.Get(()=>car1);

不知道你在问什么……我想你需要更多的背景信息——car1和car2是字段还是本地字段?如果他们是本地人,那么@Jason是正确的-你不能这样做。更重要的是,你为什么要对当地人这样做?有没有办法让这个领域不公开?@piotrek是的<代码>Car car1=(Car)fooInstance.GetType().GetField(“car1”).GetValue(fooInstance,BindingFlags.NonPublic | BindingFlags.Instance)获取非公共字段。@BalaR输入错误。您的意思是
Car car1=(Car)fooInstance.GetType().GetField(“car1”,BindingFlags.NonPublic | BindingFlags.Instance).GetValue(fooInst‌​),现在2017年怎么样?