У меня есть общий метод, который преобразует id из строки (например, полученной из Value of a HiddenField в ASP.NET Form) в целевой тип и что-то с ним делает.
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
Не очень уверен, как это обойти. Есть предложения?