Ich möchte eine Familie von Funktionen in einem Wörterbuch, die von einem Basistyp ableiten (nennen wir die Basisklasse "Objekt" für Beispielszwecke) gehalten werden. Ist es also möglich, f1 in f2 zu speichern?
Func<bool> f1 = () => true;
Func<object> f2 = f1;
Fehler 1 Kann Typ nicht implizit konvertieren
System.Func<bool>
aSystem.Func<object>
Ist das das Beste, was wir tun können?
Func<bool> f1 = () => true;
Func<object> f2 = () => (object)f1;
Fehler: (keine)
Ich denke, was es braucht, um generische freundlich ist eine wo-Anweisung... aber ich bin nicht sicher, ob Sie das mit Lamdas tun können.
Im Anschluss an Armen's Info, grub ich in den Definitionen von string und bool:
public sealed class String : IComparable, ICloneable, IConvertible, IEnumerable,
IComparable<String>, IEnumerabl<char>,
IEquatable<String>
public struct Boolean : IComparable, IConvertible, IComparable<Boolean>,
IEquatable<Boolean>
Er hat Recht, was den Unterschied zwischen Schiedsrichter und Wert angeht. Lässt sich String implizit von object ableiten? Sieht aus wie das Verhalten für Strukturen nach @PeterK's Link ist.
"ValueType überschreibt die virtuellen Methoden von Object mit geeigneten Implementierungen für Werttypen. Siehe auch Enum, das von ValueType erbt."
Objekt:
System.Object: Alle Klassen, Strukturen, Aufzählungen und Delegaten. (von http://msdn.microsoft.com/en-us/library/system.object )
Das wiederum macht Func<bool>
nicht übertragbar auf Func<object>
ein wenig dumm. d.h. die Vererbungshierarchie war aus dieser Sicht korrekt.