将T转换为IList

本文关键字:IList 转换 | 更新日期: 2023-09-27 18:07:09

我有一个像下面这样的通用方法。我检查传入的参数是一个illist但是我怎么把参数转换成一个illist呢?

public T myMethod<T>(T parameter)
{
    //check if the parameter is a list
    if (parameter IList && parameter.GetType().IsGenericType)
    {
       //How can I convert my parameter to an IList that supports IEnumerable interface?
       // So i can do the following
       foreach (var listObject in parameter)
       {
           // Do stuff
       }
    }
}

将T转换为IList

是的,Marnix的答案是正确的,你需要一个where,否则为什么你需要一个泛型T?

然而,这里有5种不同的可能性。

可能性1:

    public void xxx<T>(IList<T> parameter)
    {
        foreach (var listObject in parameter)
        {
            // Do stuff
        }
    }

可能性2:

    public void xxx<T>(T parameter) where T : IList
    {
        foreach (var listObject in parameter)
        {
            // Do stuff
        }
    }

可能性3:

    public void xxx<T>(T parameter)
    {
        IList list = parameter as IList;
        if (list != null)
        {
            foreach (var listObject in list)
            {
                // Do stuff
            }
        }
        else
        {
            // ...
        }
    }

可能性4:

    public void xxx(IList parameter)
    {
        foreach (var listObject in list)
        {
            // Do stuff
        }
    }

可能性5:

    public void xxx(object parameter)
    {
        IList list = parameter as IList;
        if (list != null)
        {
            foreach (var listObject in list)
            {
                // Do stuff
            }
        }
        else
        {
            // ...
        }
    }

另一个大问题:你为什么要使用IList?如果你只需要枚举,使用IEnumerable和T的IEnumerable,它将允许你使用更多的类型和更大的灵活性。

我想这样做:

public T myMethod<T>(T parameter) where T : IEnumerable

那么你不需要强制转换或转换任何东西,你可以直接做你的foreach:)

我认为这段代码将确保您的参数始终是

public T myMethod<T>(T parameter) where T:IList
{
    // bla
}

我会选择

public IEnumerable<T> MyMethod<T>(IEnumerable<T> parameter)
{
   ....
}

IList<T>,如果你喜欢。

你可以使用你的参数,知道它是一个IEnumerable。这是最简单的方式,它符合框架的方式。

(parameter as IList)呢?

我假设您不希望在所有情况下都将参数限制为IList

相关文章: