Я использую .NET4.5
и C#
я воображал создание методы расширения, который позволит мне передать свойство объекта, и если Id этого объекта является 0, то return null
иначе вернуть это значение свойства.метод расширения, который принимает выражение <Func<T>> выражение в качестве параметра
Я мог бы сделать это без проблем с отражением, поэтому рассмотрим это больше тренировочного упражнения, а не меня, пытаясь решить настоящую проблему.
В настоящее время метод расширения сидит в static
классе, глядя, как это:
public static object GetNullIfNotSet(this WillAnswer answer, Expression<Func<WillAnswer>> expression)
{
if (answer.Id == 0) return null;
return expression.Compile()();
}
, как я хочу, чтобы иметь возможность использовать его в следующем (ответ типа WillAnswer
):
var emptyIfNewObject = answer.GetNullIfNotSet(o => o.HasBusinessAssets)
Однако это дает мне ошибку компиляции:
Error 1 Delegate 'System.Func' does not take 1 arguments C:\hg\Website\Areas\Wills\ViewModel\Answers.cs 38 59 Website
Что заставляет меня хмуриться, так как я не думаю, что я передаю какие-либо аргументы (я?). Может ли кто-нибудь умнее меня объяснить, какие из моих ожиданий ошибочны.
На всякий случай я не был ясным, я повторю. Я хочу, чтобы позвонить по телефону var emptyIfNewObject = answer.GetNullIfNotSet(o => o.HasBusinessAssets)
и получить null
, если Id
из answer
is 0
.
Как другие указали, вам не нужно выражение. Источником вашей ошибки является тот факт, что вы определили свою функцию неправильно.Вероятно, вы хотите что-то вроде Func
назовите его так: 'answer.GetNullIfNotSet (() => (((Func) (() => answer.HasBusinessAssets))()));' какой беспорядок! вернитесь к ответу haim770 :-) –
Если у вас есть доступ к объекту, к которому вы обращаетесь к свойству, когда вы вызываете метод, который вы выполняете, поскольку это расширение самого объекта, то почему бы просто не передать свойство вместо 'Func'? – user2697817