ПРИМЕЧАНИЕ: Характерный для обновления [1 121] 11.10 к [1 122] 12.04 (а не от [1 123] 10,04 LTS)
От: ubuntu.com - UbuntuDesktop - Обновление - метод GUI
Обновление из Ubuntu 11.10
Для обновления из Ubuntu 11.10 в настольной системе запустите "Менеджер обновлений". Это должно отобразить следующее сообщение: "Новый выпуск '12.04' распределения доступен. Нажмите Upgrade и следуйте экранным инструкциям".
я могу подтвердить, что это работает над моим рабочим столом Ubuntu 11.10.
ИЛИ
От: ubuntu.com - UbuntuServer - Обновление - метод командной строки
Обновление
От 11,10 до 12,04
Для обновления из Ubuntu 11.10 в системе сервера выполните упомянутые ниже шаги:
Установка базовый менеджером обновлением пакет (если это уже не установлено).
Выполнение sudo-обновление-версии для запуска инструмента обновления. Следуйте экранным инструкциям. Обратите внимание, что обновление сервера теперь более устойчиво и использует экран GNU и автоматически повторно прикрепит в случае проблем выделенного соединения, например.
Так, введите следующие команды:
sudo apt-get install update-manager-core
sudo do-release-upgrade
sudo apt-get update && sudo apt-get upgrade
Типичный способ сделать это - использовать универсальные шаблоны, например:
public T2 Transform<T, T2>(T input)
{
T2 output;
// Do some stuff to transform input to output...
return output;
}
int number = 0;
string numberString = t.Transform<int, string>(number);
Как вы упомянули в своем комментарии ниже, универсальные шаблоны очень похожи на шаблоны C ++. Вы можете найти документацию MSDN для Generics здесь , и статья « Различия между шаблонами C ++ и C # Generics (Руководство по программированию C #) », вероятно, будет полезной.
Наконец, я может быть неправильное понимание того, что вы хотите сделать внутри тела метода: я не уверен, как вы преобразовываете произвольный тип T
в другой произвольный тип T2
, если вы не укажете ограничения на общие типы. Например, вам может потребоваться указать, что они оба должны реализовать какой-то интерфейс. Ограничения на параметры типа (Руководство по программированию C #) описывает, как это сделать в C #.
Изменить : Учитывая ваш измененный вопрос, я думаю это ответ Марко М. правильно (то есть, я думаю, вам следует использовать делегат Converter
там, где вы сейчас пытаетесь использовать свой интерфейс IDataAdapter
.)
Зачем усложнять, если вы уверены, что он возвращает строку?
var output = t.Transform(input) as string;
Если я неправильно понял, что вы говорите, вот еще один способ
var output = Convert.ChangeType(t.Transform(input), t.GetOutputType());
Вам лучше использовать что-то вроде делегата Converter
public delegate TOutput Converter<TInput, TOutput>(TInput input);
для примера, посмотрите msdn
public static void Main()
{
// Create an array of PointF objects.
PointF[] apf = {
new PointF(27.8F, 32.62F),
new PointF(99.3F, 147.273F),
new PointF(7.5F, 1412.2F) };
// Display each element in the PointF array.
Console.WriteLine();
foreach( PointF p in apf )
Console.WriteLine(p);
// Convert each PointF element to a Point object.
Point[] ap = Array.ConvertAll(apf,
new Converter<PointF, Point>(PointFToPoint));
// Display each element in the Point array.
Console.WriteLine();
foreach( Point p in ap )
{
Console.WriteLine(p);
}
}
public static Point PointFToPoint(PointF pf)
{
return new Point(((int) pf.X), ((int) pf.Y));
}
Выше приведен общий интерфейс, поэтому я использую "объект" для типов
Разве не имеет смысла использовать фактический общий интерфейс:
public U Transform<T, U>(T input)
{
string output;
return output;
}
U output = t.Transform(input) as U;
Это то, что я использовал (на основе структуры IEnumerable):
public interface IDataAdapter
{
object Transform(object input);
}
public interface IDataAdapter<OutT, InT> : IDataAdapter
{
OutT Transform(InT input);
}
public class SomeClass : IDataAdapter<string, string>
{
public string Transform(string input)
{
// Do something...
}
public object Transform(object input)
{
throw new NotImplementedException();
}
}