non funziona:In C#, perché no?: L'operatore lavora con i gruppi lambda o metodo?
Func<string, byte[]> getFileContents = (Mode != null && Mode.ToUpper() == "TEXT")
? TextFileContents
: BinaryFileContents;
private static byte[] BinaryFileContents(string file)
{
return System.IO.File.ReadAllBytes(file);
}
private static byte[] TextFileContents(string file)
{
using (var sourceStream = new StreamReader(file))
{
return Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
}
}
errore è
nessuna conversione implicita tra il gruppo e il metodo di gruppo metodo
Works:
Func<string, byte[]> getFileContents2;
if (Mode != null && Mode.ToUpper() == "TEXT")
{
getFileContents2 = TextFileContents;
}
else
{
getFileContents2 = BinaryFileContents;
}
Sono curioso di sapere perché? Mi sto perdendo qualcosa?
bello, e con la soluzione si può anche passare a var –
Non ho capito veramente questa sfumatura," ... non hanno i tipi in se stessi - sono semplicemente convertibili * per * tipi delegato. ..", fino ad ora. Vale la pena più di +1. – William
@billisphere: Sono contento di averlo aiutato :) Mi ci è voluto un * lungo * tempo per averlo anche io. (Lo stesso vale per il letterale 'null', btw. * La maggior parte * ha espressioni di tipi.) –