C# 从Activator.CreateInstance对象获取变量/属性?
以下是我的代码:C# 从Activator.CreateInstance对象获取变量/属性?,c#,C#,以下是我的代码: public class Test { string a; int b; } public class Test2 { string c; string d int e; } 我正在将其编译为DLL,并使用以下命令提取这两个类: var library = Assembly.LoadFrom(libraryPath); IEnumerable<Type> types = library.GetTypes(); var-librar
public class Test
{
string a;
int b;
}
public class Test2
{
string c;
string d
int e;
}
我正在将其编译为DLL,并使用以下命令提取这两个类:
var library = Assembly.LoadFrom(libraryPath);
IEnumerable<Type> types = library.GetTypes();
var-library=Assembly.LoadFrom(libraryPath);
IEnumerable types=library.GetTypes();
然后是“foreach type in types”,我想得到一个变量列表,但不知道怎么做。。。我正在努力:
var lib = Activator.CreateInstance(type);
Type myType = lib.GetType();
IList<PropertyInfo> props = new List<PropertyInfo>(myType.GetProperties());
foreach (PropertyInfo prop in props)
{
// Do something with propValue
}
var lib=Activator.CreateInstance(类型);
类型myType=lib.GetType();
IList props=新列表(myType.GetProperties());
foreach(PropertyInfo props in props)
{
//做有价值的事
}
“道具”总是空的
有什么帮助吗?您的类没有指定任何属性。它们指定私有字段。这意味着:
- 您需要调用
,而不是GetFields
GetProperties
- 您需要指定
,以便为您提供非公共实例字段BindingFlags.NonPublic | BindingFlags.Instance
当然,您也可以将类更改为具有公共属性。您的类不指定任何属性。它们指定私有字段。这意味着:
- 您需要调用
,而不是GetFields
GetProperties
- 您需要指定
,以便为您提供非公共实例字段BindingFlags.NonPublic | BindingFlags.Instance
当然,您也可以将类更改为具有公共属性。您显示的不是属性而是字段,因此需要调用。对于私有字段等,您需要使用相应的调用。您显示的不是属性,而是字段-因此您需要调用。对于私人字段等,您需要使用相应的
var instance = Activator.CreateInstance(myType);
FieldInfo[] fields = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo field in fields)
{
object value = field.GetValue(instance);
// Do something with field value...
}
要获取字段列表,需要使用GetFields
要获取方法列表,需要使用GetMethods
要获取属性列表,需要使用GetProperties
要获取事件列表,需要使用GetEvents
而且。。。在这种情况下,您不需要创建列表,是否确实需要创建列表?你可以直接使用数组,它总是返回一个副本。我猜你的意思是
var instance = Activator.CreateInstance(myType);
FieldInfo[] fields = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo field in fields)
{
object value = field.GetValue(instance);
// Do something with field value...
}
要获取字段列表,需要使用GetFields
要获取方法列表,需要使用GetMethods
要获取属性列表,需要使用GetProperties
要获取事件列表,需要使用GetEvents
而且。。。在这种情况下,您不需要创建列表,是否确实需要创建列表?你只需要使用数组,它总是返回一个副本。嗯,好吧,我明白了:)你是第一个,所以我接受你@现在你把我弄糊涂了。。。如果要访问属性,请使用
GetProperties
。。。如果要访问字段,请使用GetFields
…我的示例不是我的代码,而是更简单的版本。在我的“真实”代码中,我的字段不是字符串/整数,而是其他对象!所以据我所知,我必须使用Field来获取我的对象,但我认为我必须使用Properties来获取string/ints/等等。。在我的领域,对吗?@guillaumecograne如果你有一个领域是一个对象。。。然后你需要调用对象上的GetType()
,然后你需要调用GetProperties
或GetFields
,这取决于对象和你所追求的。。。用更复杂的“真实”代码问一个新问题(你甚至可以链接到这个问题)。。。不要忘记对任何有用的答案进行投票/打分。。。这是我的“最后”问题;)哼,好吧,我明白了:)你是第一个,所以我接受你@现在你把我弄糊涂了。。。如果要访问属性,请使用GetProperties
。。。如果要访问字段,请使用GetFields
…我的示例不是我的代码,而是更简单的版本。在我的“真实”代码中,我的字段不是字符串/整数,而是其他对象!所以据我所知,我必须使用Field来获取我的对象,但我认为我必须使用Properties来获取string/ints/等等。。在我的领域,对吗?@guillaumecograne如果你有一个领域是一个对象。。。然后你需要调用对象上的GetType()
,然后你需要调用GetProperties
或GetFields
,这取决于对象和你所追求的。。。用更复杂的“真实”代码问一个新问题(你甚至可以链接到这个问题)。。。不要忘记对任何有用的答案进行投票/打分。。。这是我的“最后”问题;)好的,现在让我们考虑一下,我的字段是一个具有一定数量属性的类。如何通过“FieldInfo”访问它们?@GuillaumeCogranne:首先获取字段的值,然后使用type.GetProperties
获取字段类型的属性,然后使用prop.GetValue(fieldValue,null)
获取每个属性相对于该值的值。好的,现在让我们考虑一下,我的字段是一个具有一定数量属性的类。如何通过“FieldInfo”访问它们?@GuillaumeCogranne:首先获取字段的值,然后使用type.GetProperties
获取字段类型的属性,然后使用prop.GetValue(fieldValue,null)
获取每个属性相对于该值的值。好的,现在让我们考虑一下,我的字段是一个具有一定数量属性的类。我如何通过“FieldInfo”访问它们?正如我所说,要访问属性,必须使用PropertyInfo。要访问字段,您必须使用FieldInfo.Yep,但我必须访问字段中的属性!并且myField.GetType().GetProperties()为空。。。下面是我的问题的一个更详细的版本:好的,现在让我们考虑一下我的字段是一个具有一定数量属性的类。我如何通过“FieldInfo”访问它们?正如我所说,要访问属性,必须使用PropertyInfo。要访问字段,你必须使用FieldInfo.Yep,但我必须访问FieldInfo