[英]Need Generic Constructor in C#
我想为以下代码创建通用构造函数。
由于在以下情况下将添加不同的枚举。 我希望该类是通用的。
using System.Runtime.Serialization;
using TT.SharedServices.Utils;
namespace TT.Core
{
[DataContract(Namespace = "SharedServices")]
public class Error
{
/// <summary>
/// Gets or Sets Error Code
/// </summary>
[DataMember]
public int ErrorCode { get; set; }
/// <summary>
/// Gets or Sets detailed error message
/// </summary>
[DataMember]
public string ErrorMessage { get; set; }
public Error()
{
ErrorMessage = NullValues.NullString;
ErrorCode = NullValues.NullInt;
}
public Error(AuthenticateErrorType errorType, string errorMessage)
{
ErrorCode = (int) errorType;
ErrorMessage = errorMessage;
}
public Error(LoadMemberErrorType errorType, string errorMessage)
{
ErrorCode = (int)errorType;
ErrorMessage = errorMessage;
}
}
}
建议我克服这种情况的最佳优化方法?
您可以使用非通用代码,例如
public Error(Enum errorType, string errorMessage)
{
ErrorCode = (int)(object)errorType;
ErrorMessage = errorMessage;
}
无论如何,Generis不会提供太多帮助
您可以考虑创建一个通用工厂方法来创建实例而不是构造函数:
public static Error CreateError<T>(T errorType, string errorMessage)
{
// Add if (!typeof(T).IsEnum) throw ... here if you wish
return new Error()
{
ErrorCode = (int)(object)errorType,
ErrorMessage = errorMessage
};
}
希望在C#的未来版本中会更容易,如第8点中所述。文章“ 可能的C#6.0功能说明”中的 构造函数类型参数推断 。
用户以下代码:
[DataContract(Namespace = "SharedServices")]
public class Error<T>
{
/// <summary>
/// Gets or Sets Error Code
/// </summary>
[DataMember]
public int ErrorCode { get; set; }
/// <summary>
/// Gets or Sets detailed error message
/// </summary>
[DataMember]
public string ErrorMessage { get; set; }
public Error()
{
ErrorMessage = NullValues.NullString;
ErrorCode = NullValues.NullInt;
}
public Error(T errorType, string errorMessage)
{
ErrorCode = Convert.ToInt32(errorType);
ErrorMessage = errorMessage;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.