c# - 通用方法问题

标签 c# generics

我正在尝试实现一个 LINQ-to-SQL 扩展方法,它只会获取一个随机行。这是我的代码:

public static T RandomRow(this IQueryable<T> query)
{
    Random rand = new Random();
    int row = rand.Next(0, query.Count());
    return query.Skip(row).First();
}

问题是,query.Count() 和 query.Skip() 有一个错误“The type arguments for method '...' cannot be inferred from usage”。尝试明确指定类型参数'。如果我将 T 修改为特定对象,它工作正常,但将此方法用于任何数据库对象会很棒。

有什么想法吗?

最佳答案

您的方法看起来应该是通用的:

// Note the <T> after the method name
public static T RandomRow<T>(this IQueryable<T> query)

要么那样,要么将其放在泛型类中。

您可能还想使用 ElementAt方法而不是 Skip/First

编辑:正如 CodeInChaos 指出的那样,您对 Random 的使用也存在问题。参见 my article on random numbers获取更多信息。

关于c# - 通用方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7469138/

相关文章:

java - 如何递归引用泛型参数?

c# - foreach 和泛型编译器问题

c# - 为什么我不能将对象转换为受约束的泛型?

c# - Scala:Java、C#、Scala 和 C++ 中的高级类、开放类型和通配符泛型

c# - 如何对类型列表集合进行排序

c# - 实现 IAuthenticationFilter、工作单元和依赖注入(inject)

c# - 使用紧凑的 Framework 3.5 样式化 ListView 控件

javascript - Ajax调用后通知

c# - ObservableCollection 属性类

c# - 需要帮助将 C++ 定义转换为等效的 C#