фона:обертка вокруг лямбда-выражения C#
Я создаю библиотеку COM, и хотел бы использовать модифицированную версию кода из this answer. Я хотел бы передать объект в функцию WhatsMyName
COM и вернуть представление string
. Я не совсем уверен, что это еще возможно, но пытается не повредит;)
Это, как я вижу это:
Dim myComInst as new MyComLib
MsgBox myComInst.WhatsMyName(myComInst)
и ожидая myComInst
быть возвращены.
Я застрял в завершении функции ниже, поэтому он не принимает выражение, а параметр объекта.
public static class MemberInfoGetting
{
public static string GetMemberName<T>(Expression<Func<T>> memberExpression)
{
MemberExpression expressionBody = (MemberExpression)memberExpression.Body;
return expressionBody.Member.Name;
}
}
И я могу использовать его как этот
string testVariable = "value";
string nameOfTestVariable = MemberInfoGetting.GetMemberName(() => testVariable);
, который является довольно прямо вперед.
Что я пытаюсь сделать, так это создать обертку вокруг него, чтобы я мог передать любой объект вместо использования выражения лямбда в параметре.
Итак, вместо () => testVariable
Я хотел бы передать только object
.
Я попытался обернуть его как этот
public string WhatsMyName(object objInstance)
{
return MemberInfoGetting.GetMemberName(() => objInstance);
}
но он возвращает objInstance
вместо объекта я передаю в функцию.
Я пытался использовать (простите меня) a ref
ключевое слово, но оно не работает с лямбда-выражениями.
Если кто-то может сначала проверить, возможно ли то, что я пытаюсь, или нет, это было бы здорово! Если это так, то, пожалуйста, направляйте меня или указывайте на ссылки о написании функции-обертки для выражения лямбда.
Ваше время и помощь высоко оценены!
Это абсолютно невозможно. Сожалею. – SLaks
@SLaks благодарит, вы не возражаете, объясняя, что на самом деле невозможно? общая идея или способ, которым я пытаюсь заменить лямбда-выражение? –
Вам нужно всегда передать дерево выражений. – SLaks