Static Type cant be used as type arguments
BUT
Extension Method should be in a Static class
我有一个班级querySearch
,因此我可以在我的代码中创建piece
现在,当我尝试创建扩展并要求我将该类创建为静态时。但是,如果我这样做,则无法创建List<piece>
。所以我在这里处于递归的困境中。
你可以看到我正试图克隆我的作品。
List<piece>
那么处理这种情况的正确方法是什么?
我班上的工作很好。我尝试添加克隆功能,并找到了扩展方法。那是乱七八糟的开始,是的,我并不熟悉扩展或实例方法。我正努力让它发挥作用
我的猜测是创建扩展作为一种方法,但我不知道该怎么做。
答案 0 :(得分:1)
您需要考虑两件事:
首先:该方法没有理由参加该课程。它不代表任何功能,因为它是通用的,可以返回任何类型。
第二:扩展方法应该是静态类,是的,但不是在定义类型的同一个类上。它必须在静态类上定义,并通过引用该静态类名称空间由其他类使用。
所以你可能想要做的是这样的事情:
namespace MyApp.MyExtensions
{
public static class CloneExtensions
{
public static T CloneJson<T>(this T source)
{
if (Object.ReferenceEquals(source, null))
return default(T);
return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(source));
}
}
}
然后你可以使用
namespace MyApp
{
using MyApp.Extensions;
public class TestClass
{
public TestClass()
{
var item = new piece();
var clone = piece.CloneJson();
}
}
}
如果明确键入仅克隆该片段类,那么该方法只对片段类有意义。在这种情况下,它根本不应该是一个扩展方法,而只是该类上的常规非静态方法。
答案 1 :(得分:0)
如果您需要piece
类的扩展方法,只需将扩展方法抛出到另一个类 - PieceExtensions
等。即使在IEnumerable Extension Methods的.NET中也可以这样做。