通常、私はJetbrains Resharperなどのリファクタリングツールを使用します。これにはリファクタリング、名前変更という機能があり、文字列置換と変数名の変更の違いを知ることができます。私はVisual Studio自体の中からそのような機能がないことを知っています。
// Create a parameter which passes the object
ParameterExpression param = Expression.Parameter(typeof(E), "x"); //x replaces a=>
// Create body of lambda expression
Expression body = Expression.PropertyOrField(param, fieldname);
// Create lambda function
Expression<Func<E, string>> exp = Expression.Lambda<Func<E, string>>(body, param);
// Compile it so we can use it
Func<E, string> orderFunc = exp.Compile();
、パラメータを変更するには:あなたは、このような(c# List<string> to Lambda Expression with starter example: Refactor to handle the Listからコピーされた)次のようなコードを使用することができますhttp://www.jetbrains.com/resharper/
あなたはしかし、動的な表現を構築するを参照し、パラメータを変更したい場合は、 「X」から「Y」に、私たちは次のことを行うことができます:
var newExpression = ReplaceFirstParameterName(exp, "y");
private Expression<Func<E, string>>(Expression<Func<E,string>> exp, string newParamName)
{
var cloneParam = Expression.Parameter(exp.Parameters[0].Type, newParamName);
var body = exp.Body;
var newExp = Expression.Lambda<Func<string, string>>(body, cloneParam);
return newExp;
}
なぜ表現が表現と正確に一致しないかを表す文字列を出力したいのか分かりません。なぜあなたはこれをしたいのですか?なぜコードをリファクタリングしたくないのですか?実行時にそれがどうして起こるのですか? –
@KirkWoll私はラムダ式をメタデータとして使用しています。文脈では、表現が生成され、argumは、コード内の別のポイントでユーザに表示したいものと異なる場合があります。小さなプロジェクト全体は、エラーを表示するためにマジック文字列を使用しない引数検証ライブラリです。 –