Как уже упоминалось, System.Convert и IConvertible были бы первой ставкой. Если по какой-либо причине вы не можете использовать их (например, если системные преобразования по умолчанию для встроенных типов вам не подходят), один из подходов состоит в том, чтобы создать словарь, содержащий делегаты для каждого преобразования, и выполнить поиск в нем при необходимости найдите правильное преобразование.
Например; если вы хотите преобразовать строку в тип X, вы можете получить следующее:
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(SimpleConvert.To<double>("5.6"));
Console.WriteLine(SimpleConvert.To<decimal>("42"));
}
}
public static class SimpleConvert
{
public static T To<T>(string value)
{
Type target = typeof (T);
if (dicConversions.ContainsKey(target))
return (T) dicConversions[target](value);
throw new NotSupportedException("The specified type is not supported");
}
private static readonly Dictionary<Type, Func<string, object>> dicConversions = new Dictionary <Type, Func<string, object>> {
{ typeof (Decimal), v => Convert.ToDecimal(v) },
{ typeof (double), v => Convert.ToDouble( v) } };
}
Очевидно, вы, возможно, захотите сделать что-то более интересное в своих пользовательских процедурах преобразования, но это демонстрирует суть.