私はExpression
、IronPythonでそれらを使用するためのそれらの式ツリーについて学習しているだけです(しかし、それは今のところ無関係です)。
私がやろうとしているのは、次のラムダのような式ツリーを作成することです。
Func<T, int, string> func = (s,t) => s + t;
私の現在の機能はこれです:
public static Expression<Func<T, int, string>> StringConcatSelector<T>()
{
var parameterParam = Expression.Parameter(typeof(T), "x");
var paramToString = typeof(T).GetMethods().FirstOrDefault(s=>s.Name=="ToString");
var parameter = Expression.Call(parameterParam, paramToString);
var intParameterParam = Expression.Parameter(typeof(int), "s");
var intParameterToString = typeof(int).GetMethods().FirstOrDefault(s => s.Name == "ToString");
var intParameter = Expression.Call(intParameterParam, intParameterToString);
var stringConcat = typeof(string).GetMethods().FirstOrDefault(s => s.Name == "Concat");
var result = Expression.Call(stringConcat, parameter, intParameter);
return Expression.Lambda<Func<T, int, string>>
(result, parameterParam, intParameterParam);
}
Expression.Call
のは、String.Concat
無効なため、パラメータカウントで、このように動作しません。だから私は次のようなものが必要だと思います:
List<string>
-変数式を作成しますString.Concat
list-expressionとともに使用します。私は正しいですか?
はいの場合、リスト変数(または配列)を作成するにはどうすればよいString.Concat
ですか?両方の値を追加して、それをパラメーターとして使用しますか?
String.Concat
メソッドには11(!)のオーバーロードがあり、ランダムなオーバーロードを取得しています。
あなたのケースに最も適しているのは
public static String Concat(String str0, String str1)
次のType.GetMethod
オーバーロードを使用して取得できます
public MethodInfo GetMethod(string name, Type[] types)
ここで、types
配列はメソッド引数のタイプを表します。
var stringConcat = typeof(string).GetMethod("Concat",
new[] { typeof(string), typeof(string) });
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加