c#通过反射获得localvaraile
我研究并测试 System.Reflection。
使用 property
调用 GetValue()
时会出现错误。
我认为它将把 property
从 PropertyInfo
转换为 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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论