您好我的项目中有以下代码。
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行。
非常感谢任何帮助。
答案 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);