2012-08-30 130 views
0

我有作为创建泛型类型依赖于其他类型的C#

public class SerializableList<TList, TValue> : IXmlSerializable where TList : IList<TValue> 

问题来试图实现构造函数,以确保我有一个从TList对象时,它被定义的类。

public SerializableList() 
{ 
    FList = new TList(); 
} 

这引发了没有new()约束的预期错误。正如我希望能够使用的

var myList = new SerializableList<SortedList<string>, string>(); 

定义这是否意味着我已经观察事物的方式不对,或者是有什么办法可以定义新FLIST对象?

+1

对不起,我不知道懂吗。什么阻止你写'公共类SerializableList :IXmlSerializable其中TList:IList ,new()'? – JohnB

+0

这里有什么问题?如果你想新的和编译器说新的约束是缺少的,那么你可以简单地添加新的约束... –

+0

想到我试过new()并且它使用列表导致了一个问题。这并不是我要求删除的问题。对不起,浪费时间,如果我做的。 – Jason

回答

2
public class SerializableList<TList, TValue> : IXmlSerializable 
    where TList : IList<TValue>, new() 
+0

是的,我以为我试过这个,但没有奏效。想想我会删除这个问题。 – Jason

+0

@Jason你是什么意思“它没有工作”?它没有编译?它抛出一个异常? –

+0

我看到的“错误”不能与new()添加到SerializableList的声明有关。你提出的建议完全按照要求工作。基本上当我在提问之前尝试它时,或者在整个过程中修复了一些干净的重建工作时,我都会搞得一团糟。请求删除该问题,因为它会混淆人。 – Jason

1

你想是什么Generic Type Constraints

在您的实例类的声明必须

public class SerializableList<TList, TValue> 
    : IXmlSerializable where TList : IList<TValue>, new() 

new()强制执行TList必须有一个无参数的构造函数

+0

是否没有逗号缺失? – JohnB

+0

确实,谢谢@JohnB :) –