C#で式のName
とValue
を取得する簡単な方法を作成します。しかし、私は理解できないケースを見つけました。以下のコードを参照してください:x => x.propertyでContstantExpressionの名前と値を取得する方法
public void GetValue_Object_TIn_Property_Test()
{
string val = "value";
var tuple = Tuple.Create(new object(), val);
Expression<Func<object, string>> expression = x => tuple.Item2;
Assert.AreEqual(val, expression.GetValue());
}
.GetValue()
の方法が私の拡張方法です。
基本的に、この表現樹は、LambdaExpression
,2つのMemberExpression
sおよびConstantExpression
の順になります。
tuple.Item2
の名前を取得しようとすると、最後にMemberExpression
からmemberExpression.Member.Name
が得られます。これは私に "Item2"の代わりに "タプル"を与えます。 "Item2"はどうすれば入手できますか?
また、式の値を取得しようとすると、Item2
の代わりにタプル全体が取得されます。 MemberExpression
が再び最後MemberExpression
ある
public override bool TryGetValue(
MemberExpression memberExpression,
out T value
) {
value = default(T);
bool success = false;
var fieldInfo = memberExpression.Member as FieldInfo;
if (success = (fieldInfo != null))
{
var valueObj = fieldInfo.GetValue(expression.Value);
if (success = (valueObj is T || valueObj == null))
{
value = (T)valueObj;
}
}
return success;
}
:私は値を取得するには、以下の方法を使用しています。 私はここで何が間違っていますか?紛失した正確なケースは何ですか?
は木がそのBody
「アイテム2」のName
とtuple
の値を取得するためFieldExpression
あるExpression
でMember
フィールドを持つPropertyExpression
あるLambdaExpression
で、
「ConstantExpression」が関係していると思われる理由はありませんか? – NetMage