בהמשך לשבועי הגנרי הטוב,
אתמול ראינו שאפשר לקרוא לפונקציה גנרית כך:
|
|
אחד הFeatueים המהפכניים הוא שבהרבה מאוד מקרים אפשר לקרוא לפונקציה גנרית כך:
|
|
הקומפיילר החכם יודע לבד מה הType שאנחנו רוצים לקרוא איתו לGeneric Method לפי הארגומנט שאנחנו שולחים לפונקציה.
גם את הדוגמה השנייה של אתמול:
נוכל במקום לכתוב כך:
|
|
לכתוב כך:
|
|
ואפילו אפשר!
|
|
מה שיפה פה זה שאנחנו קוראים לפונקציה שיכולה לקבל כל IEnumerable<T>, ואנחנו לא צריכים לציין שום דבר על הT שלנו.
אמרתי שבהרבה מאוד מקרים אפשר לעשות את זה. מתי אי אפשר?
כשהקומפיילר לא מבין לבד מה אנחנו רוצים לשלוח לו:
|
|
אם ננסה לקרוא עכשיו לCount נקבל עכשיו את השגיאה הבאה בקימפול:
|
|
The type arguments for method ‘Count(System.Collections.Generic.IEnumerable)’ cannot be inferred from the usage. Try specifying the type arguments explicitly.
דוגמה נוספת היא כשאנחנו מנסים לשלוח אובייקט שהוא לא מType מתאים, למשל:
|
|
נשים לב שלפעמים דווקא כן נרצה לציין את הסוג מפורשות.
למשל, בדוגמה הראשונה, ייתכן ולפעמים נרצה לקבל object[] לפעמים מהפונקציה (למשל אם עובדים בתשתית).
אז לא תהיה לנו ברירה, אלא לכתוב מפורשות כך:
|
|
תהנו