Avatar billede CodingJoe Nybegynder
08. november 2012 - 23:23 Der er 5 kommentarer og
2 løsninger

Sender metode som parameter

Jeg har en generisk metode som modtager en metode som parameter:

public T MinFedeMetode<T, TU>(Func<List<TU>>){}

Jeg har det fint ved at kalde den med metoder, der returnerer List<Foo>.

Dog har jeg en enkelt metode Z, som jeg gerne vil have køre igennem MinFedeMetode.

Problemet er den ikke returnere List<Foo>, men bare Foo.

Nu prøver jeg i kaldet af MinFedeMetode sætte Foo ind i List<Foo> som en del af kaldet til MinFedeMetode.

Dvs. lidt a la MinFedeMetode(()=> new List<Foo>().Add(MetodeZ());

Men det virker bare ikke...hvordan kan jeg kalde MinFedeMetode, ved at sætte noget ind i liste on the fly?
Avatar billede runesoft Nybegynder
09. november 2012 - 00:01 #1
Problemet er at Add ikke returnerer listen selv så du skal kontruere listen på en anden måde-
MinFedeMetode(()=>new Foo[]{MetodeZ()}.ToList());
Avatar billede arne_v Ekspert
09. november 2012 - 01:36 #2
Noget a la dette:

using System;
using System.Collections.Generic;

namespace E
{
    public class Program
    {
        public class Foo
        {
        }
        public class Bar
        {
        }
        public static T MinFedeMetode<T, TU>(Func<List<TU>> f) where T: new()
        {
            Console.WriteLine(f().Count);
            return new T();
        }
        public static T MinFedeMetode<T, TU>(Func<TU> f) where T: new()
        {
            return MinFedeMetode<T,TU>(() => new List<TU> { f() });
        }
        public static void Main(string[] args)
        {
            MinFedeMetode<Bar,Foo>(() => new List<Foo> { new Foo(), new Foo() });
            MinFedeMetode<Bar,Foo>(() => new Foo() );
            Console.ReadKey();
        }
    }
}
Avatar billede CodingJoe Nybegynder
09. november 2012 - 07:33 #3
Hmmm en overload til min generiske metode...interessant.
Avatar billede CodingJoe Nybegynder
09. november 2012 - 11:33 #4
Jeg kan egentligt bedst li' Arnes svar...men jeg vil gerne dele points.
Avatar billede arne_v Ekspert
20. november 2012 - 01:28 #5
Grundliggende er metoderne de samme.

Jeg bruger new List<>{} mens Rune bruger new [] .ToList(), men det er en detalje.

Den store forskel er at jeg med overloadet goer at det lille trick kun skal laves et sted.
Avatar billede arne_v Ekspert
20. november 2012 - 01:28 #6
Og dele er vel helt fint.

Svar fra mig.
Avatar billede CodingJoe Nybegynder
20. november 2012 - 20:34 #7
@Arne

Kan du prøve at give denne et forsøg? ->
http://www.eksperten.dk/spm/971933
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester