C#将通用列表参数存储为实例范围变量

时间:2013-12-09 06:42:40

标签: c#-4.0 generics types casting scope

我有以下方法:

public void SetList<T>(IList<T> listINeedToStore)
{
    //Store the list in instance level scope
}

我想获取listINeedToStore参数并将其存储在私有变量中,但我找不到方法。我尝试执行private IList<object> _tempVariable;之类的操作,然后将_tempVariable设置为listINeedToStore变量,以便稍后我可以使用它来删除或添加项目。我会将列表设置为_tempVariable = (IList<object>)listINeedToStore;。这不起作用,不会编译。我应该注意的是T是一种Enum。

我确信有办法做到这一点,但我不知道。

谢谢,

1 个答案:

答案 0 :(得分:1)

基本上,如果不使用类型泛型而不是方法,则无法以通用方式执行此操作。您可以存储引用,但必须通过非泛型类型的字段,例如IEnumerable甚至只是object。要真正使用该列表,您必须使用泛型方法再次获取它并进行强制转换。例如:

private object list;

public void SetList<T>(IList<T> list)
{
    this.list = list;
}

public List<T> GetList<T>()
{
    return (List<T>) list;
}

如果指定了错误的类型参数,那么在执行时获取将失败。

如果可能的话,我会尝试避免这种设计,但是如果真的需要这样做,它就会起作用。它只会增加所有呼叫者获得类型权限的负担。

请注意,如果您将参数从IList<T>更改为List<T>,则可以将其存储在IList(非通用)中,这可能会稍微有用 - 但会当然,限制你可以调用方法的环境。