静态类型混乱

时间:2015-05-19 16:49:50

标签: c#

Static Type cant be used as type arguments

BUT

Extension Method should be in a Static class

我有一个班级querySearch,因此我可以在我的代码中创建piece

现在,当我尝试创建扩展并要求我将该类创建为静态时。但是,如果我这样做,则无法创建List<piece>。所以我在这里处于递归的困境中。

你可以看到我正试图克隆我的作品。

List<piece>

那么处理这种情况的正确方法是什么?

我班上的工作很好。我尝试添加克隆功能,并找到了扩展方法。那是乱七八糟的开始,是的,我并不熟悉扩展或实例方法。我正努力让它发挥作用

我的猜测是创建扩展作为一种方法,但我不知道该怎么做。

2 个答案:

答案 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中也可以这样做。