Сортировка 1 миллиона 8-значных чисел в 1 МБ ОЗУ

Как я могу это сделать без необходимости иметь два родовых типа в MyClass. В конце концов, если мы знаем, что первым является SomeProxy, ему следует следовать, что вторым является SomeClass.

Хотя вы, кажется, нашли ответ на основную часть вопроса, я решил, что я Я предлагаю свое понимание этой части. Похоже, вы хотите, чтобы вы могли сделать что-то вроде этого:

class Proxy<T> 
{ 
    T Value { get; set; }
}
class MyClass<U> where U : Proxy<> { }

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

class MyClass<U> where U : Proxy<>
{
    void SomeMethod(U parameter)
    {
        var local = parameter.Value;
        //more code here...
    }
}

Теперь, что такое компилятор, который должен вывести здесь local? Это основная проблема, которую я вижу, что делает такую ​​функцию, если возможно, трудно реализовать. Если вы не хотите использовать какие-либо методы, использующие общий тип прокси-сервера, вместо этого вы можете сделать не общий базовый класс и использовать его для U и обойти всю проблему.

Я а не писатель-компилятор, но на ум приходит пара возможностей того, как это можно решить. Он мог бы просто сказать объект (или любое другое ограничение, которое вы указали в параметре type в Proxy), но это не кажется совершенно правильным или совершенно нормальным дженериком. Это также потребовало бы, чтобы CLR разрешала открывать общие типы как ограничение на общий параметр, что я сомневаюсь в этом. Другой вариант, который я мог видеть, - это тип, который фактически имеет параметр второго типа, и компилятор, чтобы дать вам синтаксический сахар, чтобы облегчить его.

Как бы вы ни пошли, эта функция кажется много работа для небольшого преимущества в том, что, вероятно, является редким сценарием, поэтому вряд ли можно сделать разрез.

636
задан 10 revs, 9 users 38% 14 March 2019 в 15:00
поделиться