我认为我遇到了扩展方法和LINQ的一个特殊情况。
今天,我正在声明一些扩展方法,以使我的代码更易读。因此,我创建了一个扩展方法,它获取一个对象并执行直接转换:
public static class GeneralExtensions
{
public static T Cast<T>(this object o)
{
return (T)o;
}
}
意图是能够通过类似这样的方式调用我的直接强制转换:
MyObject.CastTo<MyInterface>();
恰好在同一命名空间中,我有一个具有LINQ表达式的扩展方法。
using System;
using System.Collections.Generic;
using System.Linq;
public static class EnumExtenstions
{
public static IEnumerable<string> UseLinq(this IEnumerable<object> collection)
{
return (from object value in collection select value.ToString() ).ToList();
}
}
将这个第一个扩展方法添加到我的代码库中会导致下一个错误
Error CS1936 Could not find an implementation of the query pattern for source type 'object'. 'Select' not found.
当两个扩展方法位于不同的命名空间(且未被引用),或将Cast
重命名为其他名称,则可解决此问题。
我想更深入地了解这是为什么。是否与LINQ有重叠?如果是,为什么我的Cast
具有优先权?
请在.NET Fiddle中查找代码(链接)
Cast
方法正在隐藏 Linq 的Cast
方法。尝试重命名它。 - juharr