【问题标题】:Can't convert Class to Interface with Generics C#无法使用泛型 C# 将类转换为接口
【发布时间】:2023-01-11 21:57:04
【问题描述】:

所以,这可能看起来与其他同名问题类似——但我找不到解决我所遇到的特定问题的方法。如果已经有解决方案,请随时链接解决方案。

背景:

我有这个方法需要接受一个通用接口作为参数类型(因为其他对象也需要调用这个函数)

我已经简化了问题,不包括问题的确切细节,因为它是机密的。我已将其替换为动物。动物类型下面是一个狐狸,, ETC...

IDefinition<T> 对象是一个接口,包含要传入的任何 Animal 的任何定义。

我面临的“问题”不完全是一个阻塞问题,这有效,但它使用的是一个标准,我不会太舒服地使用..

它涉及创建 DefinitionOfFox 的实例,将其用作类的实例以调用类的方法,然后将此实例作为参数传递给该方法,因为该方法进一步需要它。正如预期的那样,这工作正常(将DefinitionOfFox作为IDefinition<T>类型传递),但我想重构它,所以我不会将DefinitionOfFox对象传递给DefinitionOfFox类......而是DefinitionOfFox 类自己创建实例。

当前状态

public class Fox : Animal {
   public void Init()
        {
            DefinitionOfFox definition = new DefinitionOfFox();
            definition.Method1<Fox>(this, definition);
        }
}
public class DefinitionOfFox : IDefinition<Fox>
    {
        public void Method1<T>(T typeOfAnimal, IDefinition<T> definition)
        {
            OtherService otherService = new OtherService();
            otherService.Method2<T>(typeOfAnimal, definition);
        }
    }

在当前状态下一切正常,但它不适合我将类实例作为参数传递给它自己的类。

理想状态

public void Init()
        {
            DefinitionOfFox definition = new DefinitionOfFox();
            definition.Method1<Fox>(this);
        }
public class DefinitionOfFox : IDefinition<Fox>
    {
        public void Method1<T>(T typeOfAnimal)
        {
            DefinitionOfFox definition = new DefinitionOfFox();
            OtherService otherService = new OtherService();
            otherService.Method2<T>(typeOfAnimal, definition);
        }

    }

OtherService类和Method2注意事项此方法必须从 DefinitionOfFox 类调用,而不是从 Fox 类调用。

public  class OtherService
    {
        public void Method2<T>(T typeOfFox, IDefinition<T> definition)
        {

        }
    }

当我试图将它传递给 OtherService.Method2() 方法时,我得到了 definition 的编译器错误。它抱怨无法将 DefinitionOFox 转换为 IDefinition&lt;T&gt;

为什么这在当前状态下有效,但在理想状态下却无效?有没有办法让我拥有理想状态?它是传递给方法的同一个对象,它只是在不同的时间创建的。

错误说参数 2:无法从 ....DefinitionOfFox 转换为 ....IDefinition

如果这没有意义,我可以详细说明 - 没问题。让我知道

谢谢你的时间!

【问题讨论】:

  • 你能加一个完整的minimal reproducible example吗?
  • OtherService.Method2(typeOfAnimal, definition); 为什么不能是OtherService.Method2(typeOfAnimal, this);
  • @Fildor 我认为这是由于泛型而发生的。
  • 你能展示方法的定义吗OtherService.Method2
  • @GuruStron 哈哈,对。错过了那部分。

标签: c# generics reflection interface


【解决方案1】:

似乎 Method1 不应该是通用的或具有非通用重载:

public class DefinitionOfFox : IDefinition<Fox> 
{
  public void Method1(Fox typeOfAnimal)
  {
     DefinitionOfFox definition = new DefinitionOfFox();
     OtherService.Method2(typeOfAnimal, definition); // or OtherService.Method2(typeOfAnimal, this); based on goals
  }
}

【讨论】:

  • @Fildor 是的,忘了删除它,谢谢。
猜你喜欢
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多