gpt4 book ai didi

编译器未找到泛型类型类的 C# 扩展方法

转载 作者:行者123 更新时间:2023-12-02 19:20:02 24 4
gpt4 key购买 nike

我正在尝试扩展泛型类型类,但我无法让 VS 查看扩展方法。

当然,有很多方法可以解决这个问题,而且它肯定不是在所有情况下都是最佳实践,但我无法弄清楚为什么在下面两个明显相同的情况下,第一个有效,而另一个无效。 t。

首先,一个成功尝试扩展 List 类的示例(只是为了证明我可以处理基础知识):

namespace Sandbox.ExtensionsThatWork
{
public static class ListExtensions
{
public static List<TheType> ExtendedMethod<TheType>(this List<TheType> original)
{
return new List<TheType>(original);
}

}

public class ExtensionClient
{
public void UseExtensionMethods()
{
List<string> a = new List<string>();
List<string> b = a.ExtendedMethod();
}
}

}

但是,我想要扩展的对象是这样的

namespace Sandbox.Factory
{
public class Factory<T>
{
public static Thing<T> Create()
{
return new Thing<T>();
}
}

public class Thing<T>{}

public static class FactoryExtensions
{
internal static Thing<FactoryType> CreateFake<FactoryType>(this Factory<FactoryType> original)
{
return new FakeThing<FactoryType>();
}
}

public class FakeThing<T> : Thing<T>{}

}

在这种情况下,我一生都无法让编译器看到扩展方法。

namespace Sandbox.FactoryClients
{
public class FactoryClient
{
public void UseExtensionMethods()
{
Factory.Thing<int> aThing = Factory.Factory<int>.Create();
///THE COMPILER WON'T FIND THE CreateFake METHOD
Factory.Thing<int> aFakeThing = Factory.Factory<int>.CreateFake<int>();
}
}
}

我错过了什么?

感谢大家抽出时间。

最佳答案

您的问题与泛型无关。

您正在调用扩展,就好像它是 Factory.Factory<int> 的静态方法一样。 ,但不可能

C# 不支持任何类型的扩展静态方法(意味着扩展方法的行为类似于 this 参数类型的静态方法)。

您需要一个实例来调用扩展方法(就像您在“工作”示例中所做的那样):

using Sandbox.Factory;
public void UseExtensionMethods()
{
Thing<int> aThing = Factory<int>.Create();
Thing<int> aFakeThing = new Factory<int>().CreateFake();
}

关于编译器未找到泛型类型类的 C# 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63192868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com