c# - 扩展方法找不到类型的定义

标签 c# compiler-errors extension-methods

我收到此扩展方法的以下编译时问题。

error CS1061: 'SomeClass' does not contain a definition for 'SomeProperty' and
    no extension method 'SomeProperty' accepting a first argument of type 'SomeClass' could be found (are
    you missing a using directive or an assembly reference?)

这些类都在同一个项目中,看来我可以毫无问题地声明该类了。我该如何解决?
using System;
using System.Collections;
using System.Collections.Generic;

public static class SomeClassListEx 
{
    public static List<SomeClass> SomeMethod<SomeClass>(this IEnumerable<SomeClass> list, int id) // where T : SomeClass
    {       
        List<SomeClass> result = new List<SomeClass> ();

        foreach (SomeClass something in list)
        {
            if(something.SomeProperty.SomeList.Contains(id))
            {
                result.Add (something);
            }
        }

        return result;
    }

}

public abstract class SomeClass : IEquatable<SomeClass>
{
    public SomethingElse SomeProperty { get; set; }

}

public interface SomethingElse
{
    List<int> SomeList { get; }
}

最佳答案

您将方法设为通用,因此在SomeMethod<SomeClass>不再是SomeClass之后,它是一个通用参数,在您实际调用该方法时可以用任何东西替换。

您的扩展方法不应该是通用的:

public static List<SomeClass> SomeMethod(this IEnumerable<SomeClass> list, int id)
{       
    List<SomeClass> result = new List<SomeClass> ();

    foreach (SomeClass something in list)
    {
        if(something.SomeProperty.SomeList.Contains(id))
        {
            result.Add (something);
        }
    }

    return result;
}

关于c# - 扩展方法找不到类型的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21866138/

相关文章:

hibernate - 消除编译时错误的问题-Springs MVC

java - Java : Encountering ConcurrentModificationException. There's something wrong with my iterators and/or HashMaps, and I don't know what it is

linq - 在 Linq 中处理 IDisposable

c# - 为什么在使用静态导入时不能将扩展方法作为静态方法调用?

c# - 提供 IDbContextFactory 的实现。但是哪里?

c# - 如何在 Xamarin.Forms 上发送短信

c# - 在项目中的所有模板中设置 Sitecore 字段共享

c# - 如果子窗口四处移动,WPF 主应用程序将停止响应

c - 导致错误 : conflicting types error as warning 的选项

c# - 为什么.Concat方法的返回值类型看起来有点奇怪 : System. Linq.Enumerable+(...)?