У меня есть общий метод, который преобразует идентификатор из строки (например, извлекается из значения HiddenField в форме ASP.NET) в целевой тип и что-то с ним делает.
private void MyMethod<T>(string rawId, Action<T> doSomethingWithId)
{
T id = (T)Convert.ChangeType(rawId, typeof(T));
doSomethingWithId(id);
}
T будет либо Guid, либо Int32, и приведенный выше код падает (во время выполнения), когда он является Guid, заявив, что приведение из String в Guid недействительно.
Затем я подумал, что могу попробовать проверить тип и если Guid, создать новый Guid:
var id = default(T);
if (id is Guid)
id = new Guid(rawId);
else
id = (T)Convert.ChangeType(rawId, typeof(T));
теперь это дает ошибку (во время компиляции), что Guid не может быть преобразован в тип T
Не слишком уверен, как обойти это. Любые предложения?