En el ejemplo dado es probable que esté mejor servido simplemente haciendo lo siguiente:
MyClass val = myObject as MyClass;
Sin embargo, para responder a su pregunta, la respuesta es usar genéricos:
protected T GetAValue<T>(object someObject)
{
if (someObject is T)
{
return (T)someObject;
}
else
{
// We cannot return null as T may not be nullable
// see http://stackoverflow.com/questions/302096/how-can-i-return-null-from-a-generic-method-in-c
return default(T);
}
}
En este método T es un tipo parámetro. Puedes usar T en tu código exactamente de la misma manera que lo harías con cualquier otro tipo (por ejemplo, una cadena), pero ten en cuenta que en este caso no hemos puesto ninguna restricción en lo que T es, y por lo tanto solo los objetos de tipo T tienen las propiedades y métodos de la base object
(GetType()
, ToString()
etc ...)
, obviamente, debemos declarar lo que T es antes de que podamos usarlo - por ejemplo:
MyClass val = GetAValue<MyClass>(myObject);
string strVal = GetAValue<string>(someObject);
para obtener más información tomar una mira el MSDN documentation on Generics
Tendría que devolver el valor predeterminado (T) aquí ya que null no funcionaría para los tipos de valor - o coloque una restricción genérica en el método => donde T: clase – saret