Если вы действительно намереваетесь расширить каждый объект, то делать это правильно. Однако, если ваше расширение действительно применяется только к подмножеству объектов, оно должно применяться к наивысшему иерархическому уровню, который необходим, но не более.
Кроме того, метод будет доступен только в том случае, если импортировано ваше пространство имен.
Я расширил Object
для метода, который пытается привести к указанному типу:
public static T TryCast<T>(this object input)
{
bool success;
return TryCast<T>(input, out success);
}
Я также перегрузил его, чтобы принять success
bool (как TryParse
делает):
public static T TryCast<T>(this object input, out bool success)
{
success = true;
if(input is T)
return (T)input;
success = false;
return default(T);
}
С тех пор я расширил это, чтобы также попытаться проанализировать input
(используя ToString
и используя конвертер), но это становится более сложным.