繁体   English   中英

需要C#中的泛型构造函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM