Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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#_Reflection_Static_Member - Fatal编程技术网

在C#中,如何动态获取静态类的成员?

在C#中,如何动态获取静态类的成员?,c#,reflection,static,member,C#,Reflection,Static,Member,我目前正在尝试使用ZXing库在WindowsPhone7.5中开发一个移动条形码阅读器。 看到我在这里发帖,你可能已经猜到我面临着某种我不知道任何解决办法的问题 问题如下: ZXing库允许多种条形码格式-但是,我想为用户提供一个设置菜单,以便用户专门关注一种条形码 BarcodeFormat对象是静态的,包含我要分配的只读成员(类型为BarcodeFormat) 看到和听到反射是这种动态行为的强大武器,我想我应该试试 到目前为止,我已经有了使用ZXing获取所有可能格式的代码 MemberI

我目前正在尝试使用ZXing库在WindowsPhone7.5中开发一个移动条形码阅读器。 看到我在这里发帖,你可能已经猜到我面临着某种我不知道任何解决办法的问题

问题如下: ZXing库允许多种条形码格式-但是,我想为用户提供一个设置菜单,以便用户专门关注一种条形码

BarcodeFormat对象是静态的,包含我要分配的只读成员(类型为BarcodeFormat)

看到和听到反射是这种动态行为的强大武器,我想我应该试试

到目前为止,我已经有了使用ZXing获取所有可能格式的代码

MemberInfo[] plist = typeof(BarcodeFormat).GetMembers();
这适用于获取格式的名称,这意味着我可以成功地在列表中显示名称。 但是当我试图将这些格式分配给实际的阅读器时,我遇到了一个问题,因为我只有MemberInfo而不再有BarcodeFormat

到目前为止,我只找到了用户希望动态访问(设置/获取)变量的示例。 然而,提议的解决方案似乎并不适合我的问题——至少我没有找到任何方法以这些方式分配格式

任何帮助都会很好:) 多谢各位

编辑: 条形码格式的使用方式如下:

WP7BarcodeManager.ScanMode = BarcodeFormat.ITF;
在本例中,仅接受ITF(五取二交错)格式的条形码

到目前为止,我已经尝试了以下方法

只需指定MemberInfo对象,而不是原始的BarcodeFormat对象

将MemberInfo对象强制转换为条形码格式

我尝试使用FieldInfo和getValue,但是似乎我必须创建一个示例对象,并为所需的字段分配一个值,以便获得值。此处无法执行此操作,因为对象是静态的,字段是只读的

整个ZXing库被编译为一个DLL,我将我的项目链接到它。(它似乎链接正确,因为其他一切都正常工作)。BarcodeFormat的示例声明如下所示

public static readonly BarcodeFormat ITF

例如:

因此,您只需调用
GetProperties()
而不是
GetMembers()
,然后调用
GetValue(null,null)
来获取值。

例如:

因此,您只需调用
GetProperties()
而不是
GetMembers()
,然后调用
GetValue(null,null)
来获取值。

动态获取ITF:

var formatName = "ITF";
var format = typeof(BarcodeFormat)
   .GetProperty(formatName, BindingFlags.Static | BindingFlags.Public)
   .GetValue(null, null);
设置WP7BarcodeManager.ScanMode:

WP7BarcodeManager.ScanMode = (BarcodeFormat)format;
ps

条形码格式的成员:

var _format = member is PropertyInfo 
  ? ((PropertyInfo)member).GetValue(null, null)
  : ((FieldInfo)member).GetValue(null);
var format = (BarcodeFormat)_format;
动态获取ITF:

var formatName = "ITF";
var format = typeof(BarcodeFormat)
   .GetProperty(formatName, BindingFlags.Static | BindingFlags.Public)
   .GetValue(null, null);
设置WP7BarcodeManager.ScanMode:

WP7BarcodeManager.ScanMode = (BarcodeFormat)format;
ps

条形码格式的成员:

var _format = member is PropertyInfo 
  ? ((PropertyInfo)member).GetValue(null, null)
  : ((FieldInfo)member).GetValue(null);
var format = (BarcodeFormat)_format;

我不完全明白你为什么要带着反思经历这些麻烦

您可以像这样枚举条形码类型(好的,伪代码,您可能应该绑定到列表框/选择器,但是..):

(事实上,您还可以使用
BarcodePhotoChooser
选择器。)

如果用户可以保存首选类型,则可以轻松地再次查找:

var typeToUse = mgr.BarcodeTypes.Where(b => b.Name == "what user selected").FirstOrDefault();
WP7BarcodeManager.ScanMode = typeToUse.BarcodeType;

我不完全明白你为什么要带着反思经历这些麻烦

您可以像这样枚举条形码类型(好的,伪代码,您可能应该绑定到列表框/选择器,但是..):

(事实上,您还可以使用
BarcodePhotoChooser
选择器。)

如果用户可以保存首选类型,则可以轻松地再次查找:

var typeToUse = mgr.BarcodeTypes.Where(b => b.Name == "what user selected").FirstOrDefault();
WP7BarcodeManager.ScanMode = typeToUse.BarcodeType;

从MemberInfo获取值有什么问题?在这种情况下,最好知道它们是字段还是属性,或者将值分配给其他对象有什么问题?你尝试了什么,失败了什么?如果我说你在另一个对象的构造函数中需要这个条形码格式,那我就错了?如果是,您能显示您使用的“无反射代码”吗?@RuneFS:我不知道如何从MemberInfo获取值。@RaphaëlAlthaus:不,我不需要构造函数的代码。我编辑了我的第一篇文章来展示它是如何使用的。从MemberInfo中获取值有什么问题?在这种情况下,最好知道它们是字段还是属性,或者将值分配给其他对象有什么问题?你尝试了什么,失败了什么?如果我说你在另一个对象的构造函数中需要这个条形码格式,那我就错了?如果是,您能显示您使用的“无反射代码”吗?@RuneFS:我不知道如何从MemberInfo获取值。@RaphaëlAlthaus:不,我不需要构造函数的代码。我编辑了我的第一篇文章来展示它是如何使用的。由于一些我不知道的原因,GetProperty返回null。我尝试使用多个名称,但每次都返回null。在使用GetProperty时,是否还有其他tripwire需要注意?解决方案是使用您发布的FieldInfo。非常感谢:)由于一些我不知道的原因,GetProperty返回null。我尝试使用多个名称,但每次都返回null。在使用GetProperty时,是否还有其他tripwire需要注意?解决方案是使用您发布的FieldInfo。非常感谢:)图书馆没有为我提供任何条形码打字机。我正在使用。此外,它还涉及如何通过反射来访问这些静态的只读成员,我对此很好奇。碰巧我在使用条形码阅读器时发现自己缺乏知识:)好吧,很抱歉给你泼冷水,但这正是我所指的图书馆。它确实提供了我建议的课程。但是,就像在很多情况下一样,每个人都有自己的。在我的情况下,图书馆没有提供任何条形码打字机。我正在使用。此外,它还涉及如何通过反射来访问这些静态的只读成员,我对此很好奇。碰巧,我在使用条形码阅读器时发现自己缺乏知识:)好吧,很抱歉给你带来麻烦,