Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将我的方法更改为泛型方法?我的代码有什么问题?_C#_C# 4.0_Generics_C# 3.0 - Fatal编程技术网

C# 如何将我的方法更改为泛型方法?我的代码有什么问题?

C# 如何将我的方法更改为泛型方法?我的代码有什么问题?,c#,c#-4.0,generics,c#-3.0,C#,C# 4.0,Generics,C# 3.0,我有三个类,叫做Student、Worker、People,它们可能来自不同的项目。它们都有两个相同的属性:姓名、年龄。现在当我想将People更改为Student时,我必须编写一个名为ChangePeopleToStudent的方法,当我想将People更改为Worker时,我必须编写一个名为ChangePeopleToWorker的方法。我尝试使用泛型方法只编写一个方法,但它似乎是错误的。如何修复它 三级 我的双变方法 通用方法:如何修复 创建接口或基类-在我的示例中,我假设一个接口,例如:

我有三个类,叫做Student、Worker、People,它们可能来自不同的项目。它们都有两个相同的属性:姓名、年龄。现在当我想将People更改为Student时,我必须编写一个名为ChangePeopleToStudent的方法,当我想将People更改为Worker时,我必须编写一个名为ChangePeopleToWorker的方法。我尝试使用泛型方法只编写一个方法,但它似乎是错误的。如何修复它

三级

我的双变方法

通用方法:如何修复


创建接口或基类-在我的示例中,我假设一个接口,例如:

public interface IPerson
{
    string Name { get; set; }
    int Age { get; set; }
}
它应该由您的所有类实现。然后你就可以写:

public static T ChangePersonTo<T>(IPerson person)
where T : IPerson, new T()
{
   return new T
   {
       Name = person.Name,
       Age = person.Age
   };
}

创建接口或基类-在我的示例中,我假设一个接口,例如:

public interface IPerson
{
    string Name { get; set; }
    int Age { get; set; }
}
它应该由您的所有类实现。然后你就可以写:

public static T ChangePersonTo<T>(IPerson person)
where T : IPerson, new T()
{
   return new T
   {
       Name = person.Name,
       Age = person.Age
   };
}

NET不支持多重继承,因此T:Student,Worker不是一个合理的条件。如果你想成为学生或工作者,你需要定义一个通用的基类或接口,或者定义两个不同的方法

如果人应该是两者之间的共同类,您可以简化您的类:

   public class  Student : People
   {
       public int MathPoint { get; set; } 
   }
   public class Worker : People
   {
       public string WorkPlace { get; set; }
   }
   public class People
   {
       public string Name { get; set; }
       public int Age { get; set; }
       public string Country { get; set; }
   }

NET不支持多重继承,因此T:Student,Worker不是一个合理的条件。如果你想成为学生或工作者,你需要定义一个通用的基类或接口,或者定义两个不同的方法

如果人应该是两者之间的共同类,您可以简化您的类:

   public class  Student : People
   {
       public int MathPoint { get; set; } 
   }
   public class Worker : People
   {
       public string WorkPlace { get; set; }
   }
   public class People
   {
       public string Name { get; set; }
       public int Age { get; set; }
       public string Country { get; set; }
   }

你肯定说不出t:SomeClass,SomeUnrelatedClass在哪里,然后让它工作。您永远不会同时满足这两个条件。您需要创建一个公共基类或接口,该基类或接口包含名称和年龄,并让您的各种类从中继承。然后使用这个基类作为你的泛型方法,其中T:SomeBaseClass。非常确定你不能说T:SomeClass,SomeUnrelatedClass在哪里,然后让它工作。您永远不会同时满足这两个条件。您需要创建一个公共基类或接口,该基类或接口包含名称和年龄,并让您的各种类从中继承。然后使用该基类作为通用方法,其中T:SomeBaseClass.Person类是来自另一个名为project a的项目的json,没有接口,我只能在project B中序列化它。可能我应该创建一个接口。Person类是来自另一个名为project a的项目的json,没有接口,我只能在项目B中序列化它。可能是我应该创建一个接口。人们来自另一个项目,并通过json字符串传递。如果我使用您的代码,这似乎是错误的,因为学生和工人没有名为“Country”的属性@LYLYLYLY这只是一个示例-它可能不适合您的情况。关键是你需要一个基类或接口。人们来自另一个项目,并通过json字符串传递。如果我使用你的代码,这似乎是错误的,因为学生和工人没有名为“Country”的属性@LYLYLY这只是一个例子-它可能不适合你的情况。关键是您需要一个基类或接口。