Tag: reflection

使用字符串值创建新实例

我有几个类:SomeClass1,SomeClass2。 如何使用字符串中的类名创建其中一个类的新实例? 通常,我会这样做: var someClass1 = new SomeClass1(); 如何从以下创建此实例: var className = “SomeClass1”; 我假设我应该使用Type.GetType()或其他东西,但我无法弄明白。 谢谢。

实现IEqualityComparer 以比较任何类的任意属性(包括匿名)

我正在编写实现IEqualityComparer的这个整洁的类,因此我可以将任何匿名类型传递给它(或实际上任何具有属性的类型),它将通过比较类型的属性值自动比较类型。 public class CompareProperty : IEqualityComparer { private Type type; private PropertyInfo propInfo; private string _fieldName; public string fieldName { get; set; } public CompareProperty(string fieldName) { this.fieldName = fieldName; } public bool Equals(T x, T y) { if (this.type == null) { type = x.GetType(); propInfo = type.GetProperty(fieldName); } object objX = propInfo.GetValue(x, null); […]

如何使用.Netreflection按名称忽略大小写来搜索属性?

我有以下代码行代码,它按名称搜索实例的属性: var prop = Backend.GetType().GetProperty(fieldName); 现在我想忽略fieldName的情况,所以我尝试了以下内容: var prop = Backend.GetType().GetProperty(fieldName, BindingFlags.IgnoreCase); … 没有骰子。 现在道具将找不到具有确切情况的字段名称。 因此…..我如何使用.Netreflection通过名称忽略大小写来搜索属性?

在C#中引用属性本身。 reflection? 通用? 类型?

如果这个问题没有很好地制定,请耐心等待。 不知道是问题的一部分。 我想要完成的一个例子可以在WPF中的PropertyChangedEventArgs中找到。 如果要在WPF中标记属性已更改,则执行以下操作: PropertyChanged(this, new PropertyChangedEventArgs(“propertyName”)); 您将字符串传递给PropertyChangedEventArgs,它引用已更改的属性名称 。 您可以想象我不希望在我的代码中使用硬编码字符串作为属性名称。 当然,重构重命名错过了它,这使得它不仅在美学上没有吸引力,而且还容易出错。 不管怎样,我更愿意参考房产本身 。 PropertyChanged(this, new PropertyChangedEventArgs(?SomeClass.PropertyName?)); 看起来我应该能够用一个简短的方法来包装它,让我说出类似上面的内容。 private void MyPropertyChanged(??) { PropertyChanged(this, new PropertyChangedEventArgs(??.ToString()??)); } … so I can say something like: MyPropertyChanged(Person.Name); //where I’m interested in the property *itself* 到目前为止,我正在画一个空白。

通过reflection获取对象

我正在寻找c#这样的机制: Car car1; Car car2; Car car = (Car)SomeMechanism.Get(“car1”); car1和car2是领域 所以我想用reflection得到一些对象,而不是键入:/我怎么能在c#中做到?

创建COM互操作类的实例

我试图使用C#在我的程序中打开CorelDRAW。 到目前为止,我已经能够通过引用适当的com库和调用来实现 CorelDRAW.Application draw = new CorelDRAW.Application(); draw.Visible = true; 但是,我希望我的程序能够与支持互操作的任何版本的CorelDRAW一起使用。 我试图在运行时使用reflection来加载互操作库,其中可以为正确的版本选择特定的dll。 从环顾四周,我尝试了以下内容。 string path = “Interop.CorelDRAW.dll”; Assembly u = Assembly.LoadFile(path); Type testType = u.GetType(“CorelDRAW.Application”); if (testType != null) { object draw = u.CreateInstance(“CorelDRAW.Application”); FieldInfo fi = testType.GetField(“Visible”); fi.SetValue(draw, true); } 该程序在u.CreateInstance…失败u.CreateInstance…失败,因为CorelDRAW.Application是一个接口,而不是一个类。 我还尝试用CorelDRAW.Application替换CorelDRAW.Application ,因为当我浏览Interop.CorelDRAW作为资源时可用,但随后u.getType…失败。 我怎样才能让它发挥作用? 谢谢!

有没有办法告诉调用c#函数的方法的参数?

我正在为我的c#应用程序开发一个免提日志机制。 这是我想要的样子: 函数a(arg1, arg2, arg 3…..)调用函数b(arg4,arg5,arg6….) ,后者又调用log() ,它能够检测b(arg4,arg5,arg6….) (这可以完成)通过Environment.StackTrace )以及调用stacktrace中每个函数(例如a和b )的值。 我希望它在调试和发布模式下工作(或者至少在调试模式下)。 这可以在.net中做吗?

改善财产监控代码?

我在C#游戏中制作了一个实用程序调试类,我正在努力监视和查看属性值。 是这样的: public static class Monitor { private static List monitoredObjects; public static void Initialize() { monitoredObjects = new List(); } public static void Watch(object o) { monitoredObjects.Add(o); } public static void Unwatch(object o) { monitoredObjects.Remove(o); } public static void Draw(RenderWindow app) { //Not actual code, I actually draw this in game foreach (object o […]

使用Assembly.GetCallingAssembly()不返回调用程序集

在我的ASP.NET MVC应用程序中,我使用一个小助手来遍历所有控制器。 这个帮助器位于与我的MVC应用程序不同的程序集中,我正在引用它。 问题是,当在helper中调用Assembly.GetCallingAssembly()方法时,它不会返回MVC app程序集,而是返回帮助程序集。 这不是我期望得到的,因为我的所有控制器都存在于MVC app程序集中,我需要反映它。 视图代码(MVC app程序集): @foreach(var item in new MvcHelper().GetControllerNames()) { @Html.ActionMenuItem( (string)HttpContext.GetGlobalResourceObject(“StringsResourse”, item), “Index”, item) } 帮助程序代码(独立程序集): public class MvcHelper { public List GetControllerNames() { var controllerNames = new List(); GetSubClasses().ForEach( type => controllerNames.Add(type.Name)); return controllerNames; } private static List GetSubClasses() { return Assembly.GetCallingAssembly().GetTypes().Where( type => type.IsSubclassOf(typeof(T))).ToList(); } } 我在这做错了什么?

在Silverlight中使用reflection来迭代所有引用程序集中的类型?

在银光中是否存在相同的情况? var assemblies = AppDomain.CurrentDomain.GetAssemblies(); http://msdn.microsoft.com/en-us/library/system.appdomain.getassemblies(v=VS.95).aspx 还有另一种方法吗? 这是一篇关于如何在混合下设计时间的文章…但是如何在运行时? The ultimate hack for Silverlight in Blend 看起来不可能这样: 在Silverlight 3中获取运行时程序集 http://forums.silverlight.net/p/22050/77847.aspx http://forums.silverlight.net/t/22050.aspx/1?Get+a+list+of+loaded+assemblies