Преобразование значения из строки в общий тип, который является либо Guid, либо int

У меня есть общий метод, который преобразует 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

Не очень уверен, как это обойти. Есть предложения?

11
задан Veli Gebrev 27 October 2011 в 11:14
поделиться