Tag: reflection

C#对象到数组

使用reflection我有一个对象,我需要将其转换为可迭代的项目列表(类型未知,将是对象)。 使用Watch窗口我可以看到我的对象是某种类型的数组,因为它告诉我元素的数量,我可以爆炸树视图来查看元素本身。 首先,我需要检查传递的对象是某种数组(可能是List,可能是object []等)。 然后我需要遍历该数组。 但是,我无法进行类型转换。 这是我如何使用它(缩写): private static void Example(object instance, PropertyInfo propInfo) { object anArray = propInfo.GetValue(instance, null); ArrayList myList = anArray as ArrayList; foreach (object element in myList) { // etc } } 我尝试了各种不同的演员阵容。 以上不会引发exception,但是当anArray实际存在且包含项目时,mylist为null。 保存的实际实例是强类型List ,但如果需要,可以采用有限的表单子集。 但是练习的重点是这个Example()方法不知道属性的基本类型。

预加载.NET程序集的好方法

在我的应用程序中,我需要在鼠标单击时显示一个表单。 问题是表单是在另一个程序集中,并且由于程序集加载的惰性,很可能在按下鼠标按钮时尚未加载程序集。 因此,在表单最终出现之前,我所拥有的是非常明显的暂停。 通过在初始化方法中调用new FormFromAnotherAssembly() ,我能够得到一个愚蠢的修复。 当然,这会照顾好事情,停顿不再存在,但它非常难看。 我唯一喜欢这个解决方案的是,如果我想使用像Assembly.Load这样的东西,我不必弄乱路径和程序集名称。 那么,如果我想确保在实际需要之前加载程序集,那么选择好的,强大的解决方案是什么? 提前致谢。

pt 2,无法捕捉的例外

更新:我已经在Microsoft Connect上提交了错误报告: https : //connect.microsoft.com/VisualStudio/feedback/details/568271/debugger-halting-on-exception-thrown-inside-methodinfo-invoke#details 如果您可以在您的计算机上重现此问题,请提供该错误以便修复它! 好的,我已经做了一些测试,我把问题简化为非常简单的事情: 一世。 在抛出exception的新类中创建方法: public class Class1 { public void CallMe() { string blah = null; blah.ToLower(); } } II。 创建一个MethodInfo,在其他地方指向此方法: Type class1 = typeof( Class1 ); Class1 obj = new Class1(); MethodInfo method = class1.GetMethod( “CallMe” ); III。 在try / catch块中包含对Invoke()的调用: try { method.Invoke( obj, null ); // exception […]

如何使用reflection来确定一个类是否是内部的?

正如标题所说,如何使用reflection来检查类定义是否定义为内部? “typeof(…)”返回下面显示的某些属性,但不返回类是否定义为内部属性。 看了谷歌,但我能找到的很多关于使用reflection运行内部或受保护方法的文章。 这不是我对这种情况感兴趣的方法,而是类定义。 var type = typeof(Customer); Assert.IsTrue(type.IsClass); Assert.That(type.IsAbstract, Is.EqualTo(isAbstract)); Assert.That(type.IsPublic, Is.EqualTo(isPublic)); Assert.That(type.IsPublic, Is.EqualTo(isPublic)); Assert.That(type.IsSealed, Is.EqualTo(isSealed)); Assert.That(type.IsSerializable, Is.EqualTo(isSerializable));

如何确定属性是从基类inheritance还是在派生中声明?

我有一个派生自抽象类的类。 获取派生类的类型我想找出哪些属性是从抽象类inheritance的,哪些属性是在派生类中声明的。 public abstract class BaseMsClass { public string CommonParam { get; set; } } public class MsClass : BaseMsClass { public string Id { get; set; } public string Name { get; set; } public MsClass() { } } var msClass = new MsClass { Id = “1122”, Name = “Some name”, CommonParam = […]

确定对象是否派生自集合类型

我想确定通用对象类型(“T”)方法类型参数是否是集合类型。 我通常会将T through作为Generic.List发送,但它可以是任何集合类型,因为它在辅助函数中使用。 我是否最好测试它是否实现IEnumerable ? 如果是这样,代码会是什么样子? 更新格林威治标准时间14:17 + 10可能在这里扩展一个解决方案(但是如果列表派生的话,它只适用于List 而不是IEnumerable ) T currentObj; // works if currentObj is List currentObj.GetType().GetGenericTypeDefinition() == typeof(List) // does not work if currentObj is List currentObj.GetType().GetGenericTypeDefinition() == typeof(IEnumerable)

reflection(?) – 检查类中每个属性/字段的null或为空?

我有一个简单的类: public class FilterParams { public string MeetingId { get; set; } public int? ClientId { get; set; } public string CustNum { get; set; } public int AttendedAsFavor { get; set; } public int Rating { get; set; } public string Comments { get; set; } public int Delete { get; set; } } […]

没有拳击的通用解析方法

我正在尝试编写一个通用的Parse方法,该方法转换并返回NamedValueCollection中的强类型值。 我尝试了两种方法,但这两种方法都通过装箱和拆箱来获得价值。 有谁知道避免拳击的方法? 如果你在生产中看到这个你会不喜欢它,它的性能有多糟糕? Usuage: var id = Request.QueryString.Parse(“id”); 尝试#1: public static T Parse(this NameValueCollection col, string key) { string value = col[key]; if (string.IsNullOrEmpty(value)) return default(T); if (typeof(T) == typeof(int)) { //return int.Parse(value); // cannot convert int to T //return (T)int.Parse(value); // cannot convert int to T return (T)(object)int.Parse(value); // works but boxes } […]

如何获取类属性的名称?

无论如何我可以得到类属性IntProperty的名称? public class ClassName { public static int IntProperty { get { return 0; } } } //something like below but I want to get the string of “IntProperty” ClassName.IntProperty.GetType().Name 基本上我想要做的是动态地将属性名称字符串保存到数据库中,稍后从数据库中检索它并动态调用属性。 好像我正在寻找的东西类似于我认为的鸭子打字。 谢谢! 更新: 这是实际的代码。 这更像是一种工作流程。 但是每个任务都被定义为类的属性(类用于对任务进行分组)。 public class ApplicationTask { public static Task SendIncompleteNotification { get { return new Task ( a => Console.WriteLine(“Sample […]

如何使用reflection动态实例化一个类型?

我需要使用reflection动态地实例化一个C#类型。 这是我的场景:我正在编写一个基类,它需要将某个对象实例化为其初始化的一部分。 基类不知道它应该实例化的对象类型,但派生类将会。 所以,我希望派生类在base()调用中将类型传递给基类。 代码看起来像这样: public abstract class MyBaseClass { protected MyBaseClass(Type myType) { // Instantiate object of type passed in /* This is the part I’m trying to figure out */ } } public class MyDerivedClass : MyBaseClass { public MyDerivedClass() : base(typeof(Whatever)) { } } 换句话说,基类委托其派生类型选择要实例化的对象类型。 有人可以帮忙吗?