Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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# 在类属性中使用泛型类型T_C#_Generics - Fatal编程技术网

C# 在类属性中使用泛型类型T

C# 在类属性中使用泛型类型T,c#,generics,C#,Generics,在c#中,如何设置一个可以返回另一个类(任何类型)的类 例如: public class DataResponse { public bool Success {get;set;} public string ResponseMessage {get;set;} public T Data {get;set;} } T应该是任何类型的类 var personData = new PersonClass() { FirstName= "John",

在c#中,如何设置一个可以返回另一个类(任何类型)的类

例如:

public class DataResponse {

public bool Success {get;set;}
public string ResponseMessage {get;set;}
public T Data {get;set;}

}
T应该是任何类型的类

var personData = new PersonClass() {
           FirstName= "John",
           LastName="Doe"
          };


var response = new DataResponse<EmployeeClass>() {
Success = true;
ResponseMessage = "OK";
Data = personData
}
数据属性将是一个不断变化的类别,例如,可能是个人或雇主

任何帮助都将不胜感激。

请:

注意:我想根据我拥有的数据创建哪些响应对象:

public static DataResponse<T> ToSuccessResult<T>(this T data)
{
    return new DataResponse<T> {
                  Success = true;
                  ResponseMessage = "OK";
                  Data = data
               };
}

您需要在类级别声明泛型类型参数:

public class DataResponse<T> // <-- here
{
    public bool Success {get;set;}
    public string ResponseMessage {get;set;}
    public T Data {get;set;}
}

只有方法和类型可以是泛型的。这意味着您不能声明泛型属性。最好是将包含属性的类设置为泛型

public class DataResponse<T>
{
    public T Data { get; set; }
}
公共类数据响应
{
公共T数据{get;set;}
}

按照Sergey Berezovskiy和p.s.w.g.的建议,使您的类成为通用类。此外,您可以要求T是实现FirstName和LastName的类型:

public interface INamable
{
    string FirstName { get; set; }
    string LastName { get; set; }
}

public class DataReponse<T> where T : INamable
{
    public bool Success { get; set; }
    public string ResponseMessage { get; set; }
    public T Data { get; set; }
}
公共接口不可用
{
字符串名{get;set;}
字符串LastName{get;set;}
}
公共类数据响应,其中T:不可
{
公共bool成功{get;set;}
公共字符串响应消息{get;set;}
公共T数据{get;set;}
}
var response = personData.ToSuccessResult();
public class DataResponse<T> // <-- here
{
    public bool Success {get;set;}
    public string ResponseMessage {get;set;}
    public T Data {get;set;}
}
var personData = new PersonClass() {
    FirstName = "John",
    LastName = "Doe"
};

var response = new DataResponse<EmployeeClass>() {
    Success = true;
    ResponseMessage = "OK";
    Data = personData
};
Console.WriteLine(response.Data.FirstName); // John
public class DataResponse<T>
{
    public T Data { get; set; }
}
public interface INamable
{
    string FirstName { get; set; }
    string LastName { get; set; }
}

public class DataReponse<T> where T : INamable
{
    public bool Success { get; set; }
    public string ResponseMessage { get; set; }
    public T Data { get; set; }
}