0
string assembly = "Ektron.Cms.ObjectFactory.dll";
string asspath = path + "bin\\" + assembly;
Assembly run_obj = Assembly.LoadFrom(@asspath);
paraObj[0] = run_obj.GetType(
    "Ektron.Cms.Search.SearchContentProperty",
    true,
    true
).GetProperty("Language");

string equalExp = "Ektron.Cms.Search.Expressions.EqualsExpression";
Type objclass = run_obj.GetType(equalExp, true, true);       
object objObj = Activator.CreateInstance(objclass, paraObj);

Activator.CreateInstance(objclass, paraObj)エラーをスローします:

System.Reflection.RuntimeParameterInfo を Ektron.Cms.Search.Expressions.PropertyExpression に暗黙的に変換することはできません

4

2 に答える 2

1

に格納されている値paraObj[0]は typeRuntimeParameterInfoですが、のコンストラクターEqualsExpressionは type のオブジェクトを想定していますPropertyExpressionparaObjActivator が新しいオブジェクトをインスタンス化できるようにするには、オブジェクトの型を適切なコンストラクターにバインドできるようにする必要があります。

問題を解決するには、インスタンスを作成し、これを配列PropertyExpressionの最初の要素として使用する必要があります。paraObj

string assembly = "Ektron.Cms.ObjectFactory.dll";
string asspath = path + "bin\\" + assembly;
Assembly run_obj = Assembly.LoadFrom(@asspath);

PropertyInfo propertyInfo = run_obj.GetType("Ektron.Cms.Search.SearchContentProperty", true, true).GetProperty("Language");
PropertyExpression propertyExpression = new PropertyExpression(propertyInfo); // create the property expression here, I am unsure how to instantiate it.
paraObj[0] = propertyExpression;
paraObj[1] = longValue;

string equalExp = "Ektron.Cms.Search.Expressions.EqualsExpression";
Type objclass = run_obj.GetType(equalExp, true, true);       
object objObj = Activator.CreateInstance(objclass, paraObj);
于 2012-01-10T13:16:11.070 に答える
0

コンストラクターがコードから期待している型を提供していません。渡していることは明らかですPropertyInfo

PropertyInfoが指して いるプロパティから値が必要な場合は、PropertyInfo.GetValueを使用する必要があります。

私はあなたのコードスニペットから(私はEktronコードを持っていないので)推測しています.これに似た何かをするべきです-

var propInfo  = run_obj.GetType(
                  "Ektron.Cms.Search.SearchContentProperty",
                   true,true).GetProperty("Language");

paraObj[0] = propInfo.GetValue(null,null)  //depending on the requirement
于 2012-01-10T13:46:59.067 に答える