Mam metodę pobierającą Action<string>
(zobacz prosty przykład poniżej), ale w metodzie wywołania, w której konstruuje się Action
, Resharper sugeruje, że funkcja lokalna powinna być użytym.Używanie funkcji lokalnej przez działanie jako parametr wejściowy
Jakie są zalecane praktyki związane z używaniem funkcji lokalnych zamiast działań, czy ma to jakieś znaczenie, czy też istnieje świadomość, o której należy pamiętać?
public void Caller()
{
string holder;
Action<string> act = s => holder = s;
void SetHolder(string s) => holder = s;
DoStuff(act);
DoStuff(SetHolder);
}
public void DoStuff(Action<string> setHolder)
{
setHolder("holders new string");
}
Twoja odpowiedź była dla mnie bardziej osobliwa, ponieważ przeczytałem [tutaj] (https://www.danielcrabtree.com/blog/84/c-sharp-7-local-functions-are-funcs-too), że jeśli lokalna funkcja jest statyczna, chyba że uzyskuje dostęp do "tego", w przeciwnym razie są to metody instancji. Stworzyłem alternatywny przykład (patrz następny komentarz, ponieważ link jest za długi tutaj) w sharplab.io (dotąd nie wiedziałem o sharplab), który dodał trochę 'null' sprawdzania wokół' Action', ale nie Funkcja lokalna. Czy możesz rozwinąć różnicę? – Ayb4btu
[Alternatywny przykład] (https://sharplab.io/#v2:CYLg1APgAgDABFAjAbgLACgoGYECY4DCcA3hnOQjlACyECGANgwKYBOAFAJQanoUKJcAHiQwAfHDoBjAC5wAvHADOCiUgCc7JZzR8KNOAGVmMgBIB7BsDbtRyzqoGbtushQAi5wzICuAMz92aRkdN3JPb39A4zNLa1ZQ9ABfDAxsBFoI3wDbQRFEcWUTCys2bnRefiViuJsAImAASyUABwY6AE84RoA7OClzHqVLZjrElOSgA===) przy użyciu co równa się 'statycznego action i Lokalnego funkcję. – Ayb4btu
Myślę, że kliknąłem, dlaczego jest zerowa kontrola. "Akcja" jest zmienną i może mieć wartość zerową, podczas gdy funkcja lokalna z powodu braku poprawnej terminologii jest kontenerem syntaktycznym do przechowywania instrukcji, dlatego nie musi być sprawdzana pod kątem pustej wartości, ponieważ nie może wewnętrznie nieważne. – Ayb4btu