加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读