c#通过反射获得localvaraile

发布于 2025-01-20 11:20:08 字数 1313 浏览 4 评论 0原文

我研究并测试 System.Reflection。

使用 property 调用 GetValue() 时会出现错误。

我认为它将把 propertyPropertyInfo 转换为 string。 但是,这里有些不对劲。

     var asmArray = AppDomain.CurrentDomain.GetAssemblies();

     //to find the specified assembly
     var asm = asmArray.FirstOrDefault(asm => string.Equals(asm.GetName().Name, "TestAspNetCoret00")); 

     //to find the specified class
     var type = asm.GetTypes().FirstOrDefault(type => string.Equals(type.Name, "StudentRespository"));

     //to find the specified method
     var methodInfo = type.GetMethods().FirstOrDefault(mI => string.Equals(mI.Name, "GetById")); 

     //to find the specified localVariable
     var localVariableInfo = methodInfo.GetMethodBody().LocalVariables.FirstOrDefault(lI => string.Equals(lI.LocalType.GetTypeInfo().Name, "SqlCommand")); 

     //to find the specified property of the localVariable
     var property = localVariableInfo.LocalType.GetTypeInfo().DeclaredProperties.FirstOrDefault(pro => string.Equals(pro.Name, "CommandText")); 

     if (property != null)
     {
     Console.WriteLine((string)property.GetValue(localVariableInfo.LocalType)); 
     // error! TargetException: Object does not match target type.
     }

I study and test System.Reflection.

It gets the error when calling GetValue() with property.

I considered that it would turn property from PropertyInfo into string.
But, something is wrong here.

     var asmArray = AppDomain.CurrentDomain.GetAssemblies();

     //to find the specified assembly
     var asm = asmArray.FirstOrDefault(asm => string.Equals(asm.GetName().Name, "TestAspNetCoret00")); 

     //to find the specified class
     var type = asm.GetTypes().FirstOrDefault(type => string.Equals(type.Name, "StudentRespository"));

     //to find the specified method
     var methodInfo = type.GetMethods().FirstOrDefault(mI => string.Equals(mI.Name, "GetById")); 

     //to find the specified localVariable
     var localVariableInfo = methodInfo.GetMethodBody().LocalVariables.FirstOrDefault(lI => string.Equals(lI.LocalType.GetTypeInfo().Name, "SqlCommand")); 

     //to find the specified property of the localVariable
     var property = localVariableInfo.LocalType.GetTypeInfo().DeclaredProperties.FirstOrDefault(pro => string.Equals(pro.Name, "CommandText")); 

     if (property != null)
     {
     Console.WriteLine((string)property.GetValue(localVariableInfo.LocalType)); 
     // error! TargetException: Object does not match target type.
     }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文