c# – 来自参数的通用T而不是手动指定
发布时间:2020-12-15 23:40:41 所属栏目:百科 来源:网络整理
导读:我写了这堂课: public class ResultsPairT{ public T Value { get; set; } public ResultsItem Result { get; set; } public ResultsPair(ResultsItem result,T value) { Result = result; Value = value; } public static ResultsPairT Create(ResultsItem
我写了这堂课:
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是类型用户,所以我不想使用<再次手动定义它.用户>. 在CreateError上,我没有问题手动定义T类,因为默认情况下它不会知道它. 在Create方法上,我需要执行此ResultsPair< User> .Create(ResultsItem,User).我不喜欢哪个. ResultsPair.Create(ResultsItem,User)应该足够了. 有没有办法让它实现我想要的? 谢谢 解决方法
您可以通过使用泛型方法Create,CreateSuccess和CreateError创建非泛型类ResultsPair来实现此目的:
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,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); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |