Tag: generics

如何在IList <T>上执行二进制search?

简单的问题 – 给定一个IList<T>你如何执行二进制search,而不用自己编写方法,也不要将数据复制到具有内置二进制search支持的types。 我目前的状态如下。 List<T>.BinarySearch()不是IList<T>的成员 List<T>没有等价的ArrayList.Adapter()方法 IList<T>不从IListinheritance,因此使用ArrayList.Adapter()是不可能的 我倾向于认为用内置的方法是不可能的,但我不能相信BCL / FCL中没有这样一个基本的方法。 如果不可能,谁可以给IList<T>最短,最快,最聪明,最漂亮的二进制search实现? UPDATE 我们都知道,在使用二分search之前,一个列表必须被sorting,因此您可以假设它是。 但我认为(但没有validation)这是sorting相同的问题 – 你如何sortingIList<T> ? 结论 似乎没有内置的二进制searchIList<T> 。 可以使用First()和OrderBy() LINQ方法进行search和sorting,但它可能会带来性能问题。 自己实现(作为扩展方法)似乎是你能做的最好的。

C#实例化反映types的generics列表

是否有可能从C#(.Net 2.0)中的reflectiontypes创build一个通用的对象? void foobar(Type t){ IList<t> newList = new List<t>(); //this doesn't work //… } typest在运行时才是已知的。

该组件没有uri标识的资源

我想创build一个通用DataGrid在我所有的视图/用户控件上使用。 这是我的结构: 名为"Core" Class Library : 称为"ViewBase" : public class ViewBase : UserControl { public ViewBase() { } //Rest of Methods and Properties } 称为"Controls" Class Library : UserControl被称为"GridView" : XAML: <vb:ViewBase x:Class="Controls.GridView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:vb="clr-namespace:Core;assembly=Core"> <Grid> <DataGrid></DataGrid> </Grid> </vb:ViewBase> 代码背后: using Core; public partial class GridView : ViewBase { public GridView () { […]

Java:通用方法重载模糊

考虑下面的代码: public class Converter { public <K> MyContainer<K> pack(K key, String[] values) { return new MyContainer<>(key); } public MyContainer<IntWrapper> pack(int key, String[] values) { return new MyContainer<>(new IntWrapper(key)); } public static final class MyContainer<T> { public MyContainer(T object) { } } public static final class IntWrapper { public IntWrapper(int i) { } } public static […]

为什么我们需要容器?

(借口:标题模仿我们为什么需要单子的标题? ) 有容器 (和索引的)(和异教的)和描述 。 但是容器是有问题的 ,对于我的小规模的经验来说,容器的思考比描述的要难。 非索引容器的types与Σ同构 – 这是非常不确定的。 形状和位置的描述有助于,但在英寸 ⟦_⟧ᶜ : ∀ {α β γ} -> Container α β -> Set γ -> Set (α ⊔ β ⊔ γ) ⟦ Sh ◃ Pos ⟧ᶜ A = ∃ λ sh -> Pos sh -> A Kᶜ : ∀ {α β} -> Set α -> […]

generics方法实现中不同的返回值types

今天,我偶然发现了一些我不希望编译的Java代码。 减less到最低限度,看起来像这样: import java.util.List; interface A { <T> List<String> foo(); } interface B { <T> List<Integer> foo(); } class C implements A, B { @Override public List<?> foo() { return null; } } 乍一看, A和B foo方法的types参数<T>看起来没有必要,因为在其他地方没有使用T 无论如何,我发现这在允许相互冲突的返回值types在同一个实现中共存的过程中发挥了至关重要的作用:如果一个或两个<T>被遗漏,代码不会被编译。 这里的非工作版本: import java.util.List; interface A { List<String> foo(); } interface B { List<Integer> foo(); } class C implements […]

什么是折叠一组潜在重叠范围的好的通用algorithm?

我有一个方法来获得这个类的一些对象 class Range<T> { public T Start; public T End; } 在我的情况下, T是DateTime ,但为简单起见使用int 。 我想要一个方法,将这些范围折叠成覆盖相同“区域”但不重叠的方法。 所以,如果我有以下范围 1至5 3至9 11到15 12至14 13到20 该方法应该给我 1至9 11至20 猜猜这会被称为工会? 我想象的方法签名可能看起来像这样: public static IEnumerable<Range<T>> Collapse<T>( this IEnumerable<Range<T>>, IComparable<T> comparer) { … } 我在这里看到了一些类似的其他问题,但我还没有find一个这样的实现。 这个答案和其他一些相同的问题的答案描述algorithm,但我不太清楚,如果我理解的algorithm。 不是特别擅长实现algorithm,所以我希望这里有人能帮助我。

与Arrays.asList()不兼容的types

在下面的例子中,如果我在列表中有多个types,它编译好,但是如果我有一个元素,它会select一个不能分配的types。 // compiles fine List<Class<? extends Reference>> list = Arrays.asList(SoftReference.class, WeakReference.class); // but take an element away and it no longer compiles. List<Class<? extends Reference>> list2 = Arrays.asList(WeakReference.class); // without giving the specific type desired. List<Class<? extends Reference>> list3 = Arrays.<Class<? extends Reference>>asList(WeakReference.class); 我相信这是一个合乎逻辑的解释,但它逃脱了我。 Error:Error:line (30)error: incompatible types required: List<Class<? extends Reference>> found: List<Class<WeakReference>> 为什么有两个元素编译,但一个元素不是? […]

“设置”一个特定的枚举types,但generics

假设我有一个抽象类 public abstract class Trainer<T extends Animal>{} 我有特定的培训师,如: public DogTrainer extends Trainer<Dog>{} public HorseTrainer extends Trainer<Horse>{} 这些“训练者”中的每一个都有一套固定的技巧,他们可以训练动物去做,我想用Enums来做。 所以我有一个接口: public interface TrainingActions<T extends Animal>{} 在每个培训师,我有一个Enum实现这个接口。 所以: public DogTrainer extends Trainer<Dog>{ public enum Trainables implements TrainingActions<Dog>{ BARK, BITE, ROLLOVER, FETCH; } } public HorseTrainer extends Trainer<Horse>{ public enum Trainables implements TrainingActions<Horse>{ JUMP, TROT, REARUP; } } 现在在每个Trainer类中,我想要一个方法说'trainingComplete',将其中一个Enums作为input,并将其保存到一个集合中。 […]

Comparable和Comparator关于null的合同

Comparable合约指定e.compareTo(null)必须抛出NullPointerException 。 从API : 请注意, null不是任何类的实例,即使e.equals(null)返回false , e.compareTo(null)应抛出NullPointerException 。 另一方面, Comparator API在比较null时没有提到什么需要发生。 考虑下面一个采用Comparable的generics方法的尝试,并返回一个Comparator ,它将null作为最小元素。 static <T extends Comparable<? super T>> Comparator<T> nullComparableComparator() { return new Comparator<T>() { @Override public int compare(T el1, T el2) { return el1 == null ? -1 : el2 == null ? +1 : el1.compareTo(el2); } }; } 这使我们能够做到以下几点: List<Integer> numbers […]