2017-10-08 5 views
0

Ich möchte ein Tuple von Tuple<String,String,Func<String,Control>>erstellen Tuple mit Multi Parameter Func

, mit Tuple.Create() mit der Art Signatur erstellen, aber wenn ich tun; Ich erhalte den Fehler:

The type arguments for method 'Tuple.Create<T1,T2,T3>(T1,T2,T3)' 
cannot be inferred from the usage. Try specifying the types explicitly. 

Hier ist mein Code-Schnipsel:

public List<Tuple<String, String, Func<string,Control>>> Headers { get; set; } = new List<Tuple<String, String, Func<string,Control>>> { 
      Tuple.Create("Name","Type", TypeControl), 
      Tuple.Create("Age","TypeAge", AgeControl), 
     }; 

public Control TypeControl(string data = ""){ 
// code returns a Control 
} 
public Control AgeControl(string data = ""){ 
// code returns a Control 
} 

Ich möchte dies mit Tuple.Create() tun, ist es möglich, ohne new Tuple<T1,T2,T3>(T1,T1,T3)

Antwort

1

Sie müssen explizit die letzten Parameter des Typs angeben, indem Sie entweder die Typenparameter liefernd:

public List<Tuple<string, string, Func<string, Control>>> Headers { get; set; } = new List<Tuple<string, string, Func<string, Control>>> { 
    Tuple.Create<string, string, Func<string, Control>>("Name","Type", TypeControl), 
    Tuple.Create<string, string, Func<string, Control>>("Age","TypeAge", AgeControl) 
}; 

oder durch eine Func<string, Control> vorbei:

public List<Tuple<string, string, Func<string, Control>>> Headers { get; set; } = new List<Tuple<string, string, Func<string, Control>>> { 
    Tuple.Create("Name","Type", new Func<string, Control>(TypeControl)), 
    Tuple.Create("Age","TypeAge", new Func<string, Control>(AgeControl)) 
}; 

Mehr Informationen über die Gründe:

Why can't C# compiler infer generic-type delegate from function signature?