我写了这堂课:
public class ResultsPair<T>
{
public T Value { get; set; }
public ResultsItem Result { get; set; }
public ResultsPair(ResultsItem result, T value)
{
Result = result;
Value = value;
}
public static ResultsPair<T> Create(ResultsItem result, T value)
{
return new ResultsPair<T>(result, value);
}
public static ResultsPair<T> CreateSuccess(T value) => Create(ResultsItem.Success(string.Empty), value);
public static ResultsPair<T> CreateError(ResultsItem result) => Create(result, default(T));
}
要打电话,我会这样做:
ResultsPair<User>.CreateSuccess(newUser);
ResultsPair<User>.CreateError(ResultsItem.Error("A server connection error has occured."));
在第一个上,newUser是User类型,所以我不想再使用&lt;用户&gt;。
在CreateError上,我手动定义T类没有问题,因为它默认不知道它。
仅在Create方法上,我需要执行此操作ResultsPair<User>.Create(ResultsItem, User)
。我不喜欢。 ResultsPair.Create(ResultsItem, User)
应该足够了。
有没有办法让它实现我想要的?
由于
答案 0 :(得分:7)
您可以通过使用通用方法ResultsPair
,Create
和CreateSuccess
另外创建非泛型类CreateError
来实现此目的:
public static class ResultsPair
{
public static ResultsPair<T> CreateSuccess<T>(T value) => Create(ResultsItem.Success(string.Empty), value);
public static ResultsPair<T> CreateError<T>(ResultsItem result) => Create(result, default(T));
public static ResultsPair<T> Create<T>(ResultsItem result, T value)
{
return new ResultsPair<T>(result, value);
}
}
用法:
ResultsPair.CreateSuccess(newUser);
ResultsPair.CreateError<User>(ResultsItem.Error("A server connection error has occured."));
ResultsPair.Create(ResultsItem, User)
只是为了澄清:您的完整代码如下所示:
public class ResultsPair<T>
{
public T Value { get; set; }
public ResultsItem Result { get; set; }
public ResultsPair(ResultsItem result, T value)
{
Result = result;
Value = value;
}
}
public static class ResultsPair
{
public static ResultsPair<T> CreateSuccess<T>(T value) => Create(ResultsItem.Success(string.Empty), value);
public static ResultsPair<T> CreateError<T>(ResultsItem result) => Create(result, default(T));
public static ResultsPair<T> Create<T>(ResultsItem result, T value)
{
return new ResultsPair<T>(result, value);
}
}