Я хотел бы, чтобы семейство функций хранилось в словаре, который был получен из некоторого базового типа (например, вызывается базовый класс "объект" ). Таким образом, можно сохранить f1 в f2?
Func<bool> f1 = () => true;
Func<object> f2 = f1;
Ошибка 1 Невозможно неявно преобразовать тип
System.Func<bool>
вSystem.Func<object>
Это лучшее, что мы можем сделать?
Func<bool> f1 = () => true;
Func<object> f2 = () => (object)f1;
Ошибки: (нет)
Я предполагаю, что он должен быть универсальным дружественным - это утверждение where... но я не уверен, что вы можете сделать это с помощью lamdas.
Следуя за информацией Армена, я вникнул в определения string и bool:
public sealed class String : IComparable, ICloneable, IConvertible, IEnumerable,
IComparable<String>, IEnumerabl<char>,
IEquatable<String>
public struct Boolean : IComparable, IConvertible, IComparable<Boolean>,
IEquatable<Boolean>
Он имеет право на значение ref Vs. Строит ли строка из объекта неявно? Похоже, это поведение для структур в соответствии с ссылкой @PeterK.
"ValueType переопределяет виртуальные методы из Object с более соответствующие реализации для типов значений. См. Также Enum, который наследует от ValueType."
Объект:
System.Object: все классы, структуры, перечисления и делегаты. (от http://msdn.microsoft.com/en-us/library/system.object)
Это, в свою очередь, делает Func<bool>
недоступным для Func<object>
немного тупым. то есть иерархия наследования была правильна с этой точки зрения.