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



我有以下方法:

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的一种类型。

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

谢谢,

基本上,如果不使类型成为泛型而不是方法,就无法以泛型的方式进行操作。您可以存储引用,但它必须通过非泛型类型的字段,例如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(非泛型)中,这可能会稍微有用一些,但这当然会限制您可以调用该方法的情况。

最新更新