Преобразование типа Объект с помощью Объекта “Типа” в C#

ПРИМЕЧАНИЕ: Характерный для обновления [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

10
задан Ryall 3 September 2009 в 16:34
поделиться

5 ответов

Типичный способ сделать это - использовать универсальные шаблоны, например:

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 .)

8
ответ дан 3 December 2019 в 17:59
поделиться

Зачем усложнять, если вы уверены, что он возвращает строку?

var output = t.Transform(input) as string;

Если я неправильно понял, что вы говорите, вот еще один способ

var output = Convert.ChangeType(t.Transform(input), t.GetOutputType());
7
ответ дан 3 December 2019 в 17:59
поделиться

Вам лучше использовать что-то вроде делегата 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));
}
3
ответ дан 3 December 2019 в 17:59
поделиться

Выше приведен общий интерфейс, поэтому я использую "объект" для типов

Разве не имеет смысла использовать фактический общий интерфейс:

public U Transform<T, U>(T input)
{
    string output;

    return output;
}

U output = t.Transform(input) as U;
2
ответ дан 3 December 2019 в 17:59
поделиться

Это то, что я использовал (на основе структуры 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();
    }
}
2
ответ дан 3 December 2019 в 17:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: