【发布时间】:2015-10-29 23:41:47
【问题描述】:
这是我目前所拥有的:
var constructor = typeof (ParentModel).GetConstructor(FieldInformationTypes);
var model = (ParentModel)constructor.Invoke(Values.Values.ToArray());
return model;
和FieldInformationTypes(在具有上述代码的类的超类中)
protected Type[] FieldInfoTypes;
public Type[] FieldInformationTypes
{
get
{
if (FieldInfoTypes == null) return FieldInfoTypes;
var memberTypes = (
from fieldInfo in FieldInformation
select fieldInfo.MemberType).ToArray();
FieldInfoTypes = (
from memberType in memberTypes
select memberType.GetType()).ToArray();
return FieldInfoTypes;
}
}
protected FieldInfo[] FieldInfos;
public FieldInfo[] FieldInformation
{
get
{
// don't GetFields all the time
if (FieldInfos != null) return FieldInfos;
FieldInfos = typeof(T).GetFields(
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance);
return FieldInfos;
}
}
T 是我尝试动态创建的带有构造函数的类。
Values 只是strings 到objects 的字典,其中字符串是参数字段名称,值可以是任何值。
我知道使用命名参数,ParentModel 可以这样创建:
new ParentModel(
children: _children,
isResponsible: _isResponsible);
或者通过这种技术:
new ParentModel()
{
Children = _children,
IsResponsible = _isResponsible
};
这两种调用方法(在我的例子中是构造函数)的技术看起来都非常像哈希/字典。所以,我觉得应该可以通过字典动态调用方法。我的问题是:如何?
理想情况下,我希望能够通过执行以下操作来调用方法:
new MyObject(myDictionaryOfParameters.ToNamedParameter());
或者类似的东西。
【问题讨论】:
标签: c# dynamic metaprogramming