c# - 通用方法,如果它是一个列表,如何获取值?

标签 c#

我有一个通用方法,传递的对象可能是单个对象或对象列表。示例:

public void MyGenericMethod<T>(T something, int? index)
{
    // if it is a list how do I get to the object in the list?
}

有些情况下有人会通过一个列表。如果他们确实传递了一个对象列表,我将使用索引参数从列表中获取单个对象。我可以假设如果 index 不为 null 那么他们传入一个列表,但是我如何获得该值?我不能这样做:

object temp = something[index.Value];

重要的是要注意,我不能强制用户将单个对象传递到我的通用方法中。此外,我无法将其设为数组 (T[]) 并强制用户传入数组(或列表)。

最佳答案

您可以使用转换来获取 IList .

IList list = something as IList;
if( list != null )
{
    object temp = list[index.Value];
}

然而,使用一个专用于 IList 的泛型方法重载而不是一个庞大的泛型方法可能会更简单且类型更安全。

public void MyGenericMethod<T>(IList<T> something, int index)
{
    var item = something[index];
    // etc...
}

关于c# - 通用方法,如果它是一个列表,如何获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17574684/

相关文章:

c# - 如果值为负,WPF DataGridColumn 前景色变为红色

c# - 错误无法加载文件或程序集 'Interop.ActiveDs'

c# - 用于从控制台应用程序打印调试信息的 Console.Writeline() 替代方法?

c# - 通过asp .net core连接到Google api会导致无限的授权循环

c# - 为什么这个表达式有效? (C#6.0)

c# - LINQ Left Outer Join 结合 Let

c# - 错误 : Object reference not initialised

c# - 统一 5 : access/modify AnimatorController from C# script in editor

c# - 如何检查字符串格式

c# - 如何使用 C# 代码而不是 XAML 启用窗口镶边?