estoy atascado.Convertir Acción <T> a la acción <object>
¿Cómo convierto el Action<T> to an Action<Object>
en C#?
Saludos Magnus
estoy atascado.Convertir Acción <T> a la acción <object>
¿Cómo convierto el Action<T> to an Action<Object>
en C#?
Saludos Magnus
He aquí una muestra de lo que pide (verificación de tipos puede ser añadido en la última línea para manejar adecuadamente excepción de difusión no válido a ser más fácil de usar):
public Action<object> Convert<T>(Action<T> myActionT)
{
if (myActionT == null) return null;
else return new Action<object>(o => myActionT((T)o));
}
puede ser usted puede dar más detalles sobre la tarea, porque ahora parece un poco extraño.
No está seguro de lo que quiere decir mediante la conversión ... La acción es la declaración genérica de un delegado de la acción ... si quieres un delegado de acción que trabaja en 'objeto' que haría algo como :
var myAction = new Action<object>(obj=> ...);
supongo que tienes algo como esto:
void Foo(Action<object> action) { }
Action<something> myaction;
y desea convertir miaccion para que pueda pasar a Foo.
que no funciona.
Foo puede pasar cualquier objeto a la acción cuyo tipo se deriva de objeto. Pero myaction solo acepta objetos que se derivan de algo.
que estaba buscando una manera de hacer esto hoy y tropezamos con este post. En realidad, la única manera sencilla que encontré para hacerlo era para envolver Acción <cadena> dentro de una nueva acción <objeto>. En mi caso, estaba impulsando mis acciones en un diccionario simultáneo y luego las recuperaba por tipo. Efectivamente, estaba procesando una cola de mensajes donde las acciones podrían definirse para manejar mensajes con una entrada tipeada particular.
var _actions = new ConcurrentDictionary<Type, Action<object>>();
Action<string> actionStr = s => Console.WriteLine(s);
var actionObj = new Action<object>(obj => { var castObj = (V)Convert.ChangeType(obj, typeof(V)); actionStr(castObj); });
_actions.TryAdd(typeof(string), actionObj);
La pregunta no tiene sentido, no puede crear una Acción, debe especificar un tipo. –
Adivinando esta una de esas preguntas de covarianza/contravarianza, de lo contrario la respuesta sería 'Acción
No puede convertir un tipo genérico abierto en un Objeto, a menos que T esté restringido a la clase. En el código, la Acción asignada a la Acción