Tag: reflection

创建将一种类型的函数转换为另一种类型的函数

对于一些花哨的reflection内容,我有一个类型为Func的函数,需要将它传递给一个接受Func类型的函数,其中T在运行时才知道。 例如: public bool MyOperation(Func op) { return _myValues.Any(op); } public static bool InvokeOperationMethod(MethodInfo info, object obj,Func opAsObject) { info.Invoke(obj, opAsObject); } 问题在于,由于我有一个较弱类型的lambda,我不能将它作为更强类型的参数传递。 所以我尝试创建一个帮助程序,它将创建一个将较弱类型的lambda转换为更强类型的函数。 例如,我可以打电话 var converter = CreateConverter(typeof(string)); Func asObject = o => o.ToString() == “a string”; //Dump example Func asString = (Func)converter(asObject); Assert.IsTrue(asInt(“a string”)); 当然在实际代码中,目标类型直到运行时才知道,而实际谓词不是一些简单的测试。 这是我的尝试: /// /// Converts a predicate of Func […]

使用配置文件中的字符串来初始化generics类型

我上课了: public class MyClass 我有一个我正在阅读的配置文件,比如说,类型为T Guid 。 我怎么做,除了使用配置文件中的字符串而不是实际类型(而不是硬编码Guid )? MyClass = new MyClass();

将.Net汇编加载/注入现有的.net流程?

在我的情况下,我想将一个自定义的.net程序集加载到一个正在运行的.net进程的域中,例如Windows Explorer ,我已经尝试过的只是将程序集注入到explorer.exe但是这似乎没有用到没有明显的原因。 注射器代码: public class CodeInjector { [DllImport(“kernel32.dll”, SetLastError = true)] public static extern IntPtr OpenProcess(uint dwDesiredAccess, int bInheritHandle, uint dwProcessId); [DllImport(“kernel32.dll”, SetLastError = true)] public static extern int CloseHandle(IntPtr hObject); [DllImport(“kernel32.dll”, SetLastError = true)] public static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName); [DllImport(“kernel32.dll”, SetLastError = true)] public static extern IntPtr GetModuleHandle(string lpModuleName); [DllImport(“kernel32.dll”, […]

没有拳击的Marshal.StructureToPtr

有没有办法将一个结构(可能存储在TypedReference中 )编组到非托管内存而不实际装箱? 结构的类型在运行时是未知的,因此我不能使用StructureToPtr(.NET 4.5.1)的generics重载。 我可以获得StructureToPtr重载的MethodInfo,但似乎没有办法调用它来传递generics引用或TypedReference 。 编辑:通用的StructureToPtr仍然对结构进行封装,因此尝试调用它是没用的。

Automapper,generics,dto funtimes

这是交易: 我有一个报表设计器,用户可以根据某些预定义的数据集创建报表。 他们可以选择要包含在报表中的一组列,然后在运行报表时,通过使用automapper将NHibernate集合映射到dto类集合来创建IList。 这个问题是DTO集合有一堆冗余列,因为它将填充所有数据,无论是否需要它。 我的解决方案? 为什么不在运行时使用我们拥有的信息创建DTO类型,并仅使用所需的属性将nhibernate集合映射到动态创建的DTO集合: #region create a dto type: AssemblyName assemblyName = new AssemblyName(); assemblyName.Name = “tmpAssembly”; var assemblyBuilder = System.Threading.Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run); ModuleBuilder module = assemblyBuilder.DefineDynamicModule(“tmpModule”); // create a new type builder TypeBuilder typeBuilder = module.DefineType(“ReportDto”, TypeAttributes.Public | TypeAttributes.Class); foreach (var propertyName in propNames) { // Generate a private field FieldBuilder field = […]

使用reflection将XML转换为Object

如果你想解决问题,这里有一个很大的问题:D 首先,它不是关于序列化,好吗? 好吧,我的情况……我正在编写一个函数,我将作为参数传递给Xml(XmlDocument)和一个对象(Object)作为参考。 它将返回一个填充了Xml(XmlDocument)中的值的对象(被引用的对象)。 例如: 我有一个Xml像: 1 Daniel 我也有我的function public Object transformXmlToObject (XmlDocument xml, Object ref) { // Scroll each parameters in Xml and fill the object(ref) using reflection. return ref; } 我将如何使用它? 我会用这样的: [WebMethod] public XmlDocument RecebeLoteRPS(XmlDocument xml) { // class user receive the object converted from the function User user = new User(); […]

如何通过reflection区分值类型,可空值类型,枚举,可空枚举,引用类型?

如何通过reflection区分值类型,可空值类型,枚举,可空枚举,引用类型? enum MyEnum { One, Two, Three } class MyClass { public int IntegerProp { get; set; } public int? NullableIntegerProp { get; set; } public MyEnum EnumProp { get; set; } public MyEnum? NullableEnumProp { get; set; } public MyClass ReferenceProp { get; set; } } class Program { static void Main(string[] args) { […]

反映具有约束的generics类型的所有可能排列

给定具有约束的generics类型: class MyClass where T: Alpha { } 和约束的实现: class Alpha {} class Bravo : Alpha {} class Charlie : Alpha {} 如何在运行时获得所有组合的generics类型? // I want these types at run-time MyClass MyClass MyClass 编辑:根据@ rich.okelly的回答,我认为真正的问题是: 如何在运行时找到实现我的generics类型约束的所有类型? 所以,如果我给了typeof(MyClass) ,我会得到上面的类型。

从对象获取属性信息,而不将属性名称作为字符串

出于某些原因,我需要创建一个PropertyInfo实例的Dictionary,它对应于某些类的属性(让我们称之为EntityClass )。 好的,我可以使用typeof(EntityClass).GetProperties() 。 但我还需要确定某些特定属性的值(在编译时已知)。 通常我可以做以下其中一项: EntityInstance.PropertyX = Value; typeof(EntityClass).GetProperty(“PropertyX”).SetValue(EntityInstance, Value, null); 为了填满我的字典,我需要使用PropertyInfo实例而不是正常设置值。 但我觉得通过字符串名称获取属性并不舒服。 如果某些EntityClass发生更改,则会带来许多exception而不是编译错误。 所以,我要问的是: 如何在不传递字符串名称的情况下获取已知属性的PropertyInfo? 如果有像代表一样的话,我会很高兴: SomeDelegateType MyDelegate = EntityInstance.MethodX; 理想的情况是: SomePropertyDelegate MyPropertyDelegate = EntityInstance.PropertyX;

C# – 将’object’参数转换为该对象的类型?

C# 大家好, 我将一个对象传递给一个方法。 我想将该对象强制转换为特定的类,以便我可以执行自己的特定方法吗? 我怎样才能做到这一点? Move( new Cat() ); Move( new Pigeon() ); public void Move(object objectToMove) { if(objectToMove== Cat) { Cat catObject = objectToMove as Cat; catObject.Walk(); } else if(objectToMove== Pigeon) { Rat pigeonObject = objectToMove as Pigeon; pigeonObject.Fly(); } }