为重复的代码创建一个C#Generic类

时间:2017-02-23 14:15:20

标签: c# asp.net linq generics delegates

您好我的项目中有以下代码。

if (response == null || response.StatusCode != HttpStatusCode.OK)    
    return new GetDictionaryPlResponse
    {
        Responses = new Responses
        {
            IsSuccess = false,
            ResponseMessage = "There response data is invalid!"
        }
    };

我正在尝试使用Generic简化此操作并完成以下操作。

if (response == null || response.StatusCode != HttpStatusCode.OK)
{
    var returnValue = ReturnNullFoundClass
                      .ResponseType<GetDictionaryPlResponse>();
    returnValue.Responses = ReturnNullFoundClass.ResponseNullFound();
    return returnValue;
}

这是扩展课程。

public static class ReturnNullFoundClass
{

    public static Responses ResponseNullFound()
    {
        return new Responses
        {
            IsSuccess = false,
            ResponseMessage = "There response data is invalid!"
        };
    }

    public static T ResponseType<T>() where T : new()
    {
        return new T();
    }
}

我想知道是否有一种方法可以使用Func方法进一步简化,而不是声明3行。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

为简化代码,您可以做的最好的事情就是h.UseSsl(s => { s.ServerName = SslHostName; s.CertificatePath = SslFileLocation; s.CertificatePassphrase = SslPassphrase; // The below allows the Root CA's CN to be different than the others, but adds vulnerability s.AllowPolicyErrors(System.Net.Security.SslPolicyErrors.RemoteCertificateNameMismatch); }); 工作。实现它的一种方法如下:

DBNull.Value

然后你可以这样称呼它:

    public class DictionaryPIResponseNullFound
    {
        public static readonly GetDictionaryPlResponse Value = new GetDictionaryPlResponse
        {
            Responses = new Responses
            {
                IsSuccess = false,
                ResponseMessage = "There response data is invalid!"
            }
        };
    }

答案 1 :(得分:0)

如果你想要一个静态工厂,你可以试试这样的东西:

public class Responses 
{
    // Some code here
    public bool IsSuccess { get; set; }
    public string ResponseMessage { get; set; }
}

public interface IResponsesContainer
{
    Responses Responses { get; set; }
}

public class GetDictionaryplResponse : IResponsesContainer
{
    public Responses Responses { get; set; }
}

public enum ResponsesTypes
{
    NullFound
}

public static class ResponsesFactory 
{
    public static IResponsesContainer CreateContainer<TContainer>(ResponsesTypes responsesType)
        where TContainer : IResponsesContainer, new()
    {
        var container = new TContainer();
        switch(responsesType)
        {
            case ResponsesTypes.NullFound:
                container.Responses = new Responses()
                {
                    IsSuccess = false,
                    ResponseMessage = "There response data is invalid!"
                };
                return container;
            default:
                throw new NotImplementedException();
        }
    }
}

将您的GetDictionaryPlResponse类抽象为接口并返回接口。

这种方式在定义方面稍微冗长一些,但对于未来的增强功能非常灵活。

如果您不希望Responses IResponsesContainer拥有公共设置者,那么您需要稍微更改一下。也许使用抽象类,或改变界面的工作方式。

编辑你可以这样调用这个方法

var container = ResponsesFactory.CreateContainer<GetDictionaryplResponse>(ResponsesTypes.NullFound);