C# 反射创建泛型实例
2021/7/16 11:14:33
本文主要是介绍C# 反射创建泛型实例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
准备一个泛型类和一个已经有具体类型的属性
1 public class PropertyClass<T1, T2> 2 { 3 } 4 5 public class Test 6 { 7 public PropertyClass<string, int> P { get; set; } 8 }
准备一个方法来实例化有具体类型的属性
1 public static void Instantiationa(object obj, string propertyName) 2 { 3 var type = obj.GetType(); 4 5 var property = type.GetProperty(propertyName);//获取属性信息 6 7 var t = property.PropertyType; 8 if (t.IsGenericType) 9 { 10 var types = t.GenericTypeArguments;//获取泛型类的真实类型参数 11 var tm = typeof(PropertyClass<,>);//获取开放泛型 12 var ttt = tm.MakeGenericType(types);//根据类型参数获取具象泛型 13 var value = Activator.CreateInstance(ttt);//实例化 14 property.SetValue(obj, value);//赋值 15 } 16 }
运行
1 private static void Main(string[] args) 2 { 3 var test = new Test();//此处不实例化属性; 4 if (test.P == null) 5 { 6 Console.WriteLine("属性为空"); 7 } 8 Instantiationa(test, "P"); 9 if (test.P != null) 10 { 11 Console.WriteLine("属性已经被实例化"); 12 } 13 }
运行结果
再创建一个 实例化具象类型的方法
在泛型类里面添加2个属性
1 public class PropertyClass<T1, T2> 2 { 3 public T1 Value1 { get; set; } = default; 4 5 public T2 Value2 { get; set; } = default; 6 }
创建实例化的方法
1 public static object InstantiationaReal() 2 { 3 var type = typeof(PropertyClass<,>); 4 var types = new Type[] { typeof(double), typeof(bool) };//具体类型 5 var trueType = type.MakeGenericType(types);//根据类型参数获取具象泛型 6 var obj = Activator.CreateInstance(trueType); 7 return obj; 8 }
运行
1 private static void Main(string[] args) 2 { 3 4 var obj = (PropertyClass<double, bool>)InstantiationaReal(); 5 6 if (obj!=null) 7 { 8 Console.WriteLine(obj.Value1); 9 Console.WriteLine(obj.Value2); 10 } 11 12 }
结果
这篇关于C# 反射创建泛型实例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#