Nano Hash - криптовалюты, майнинг, программирование

Как создать общий делегат Func

у меня есть этот метод

    public static T F<T>(T arg)
    {
        return arg;
    }

и я хочу создать делегата Func для F. Я пробую это

public Func<T, T> FuncF = F;

но это не синтаксически правильно. Как я могу это сделать.

05.11.2014

  • Мне кажется, это нормально dotnetfiddle.net/JRjFxU 05.11.2014
  • @dcastro Вы добавили что-то, чего нет в исходном вопросе, поэтому это работает. 05.11.2014
  • @DStanley Я предположил, что окружающий класс был универсальным: / Я слишком много предполагал 05.11.2014

Ответы:


1

Только классы и методы могут быть универсальными сами по себе. Поле, использующее универсальные параметры, должно находиться в контексте универсального класса:

public class Test<T>
{
    public static T F(T arg)
    {
        return arg;
    }

    public Func<T, T> FuncF = F;
}

Или, если параметр типа для F не должен быть связан с FuncF, то просто используйте другое имя для одного из параметров:

public class Test<T>
{
    public static U F<U>(U arg)
    {
        return arg;
    }

    public Func<T, T> FuncF = F;
}
05.11.2014

2

Вы можете (повторно) предоставлять дженерики только из универсального класса или в универсальном методе. В противном случае вам нужно будет указать определенные типы для T (например, для локальной переменной или в качестве поля или свойства в неуниверсальном классе). Примеры:

// I.e. Re-expose by wrapping your Func in a static class:
public static class MyFuncs
{
    public static T F<T>(T arg)
    {
        return arg;
    }
}

public class Generics<T>
{
    // Use it as a field
    private Func<T, T> f = MyFuncs.F;

    // Or getter func
    public Func<T, T> FuncF()
    {
        return MyFuncs.F;
    }
}

// Re-expose generic via Generic Method
public class GenericMethod
{
    public Func<T, T> FuncF<T>()
    {
        return MyFuncs.F;
    }
}


// i.e. Consume the generic and do not re-expose it
public class SpecificClass
{
    public Foo FuncF(Foo f)
    {
        return MyFuncs.F<Foo>(f); // <Foo> is optional - compiler can infer
    }
}
05.11.2014

3

F<int> — это метод, который можно присвоить переменной Func<int, int>.

F<double> — это другой метод, который можно присвоить переменной Func<double, double>.

Но у вас не может быть общих переменных. С# просто так не работает.

Ближе всего к универсальным переменным является поле универсального класса:

static class DelegateContainer<T>
{
  public static Func<T, T> FuncF = F;
}
05.11.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..