gpt4 book ai didi

c# - 来自参数的通用 T 而不是手动指定

转载 作者:行者123 更新时间:2023-11-30 14:06:41 27 4
gpt4 key购买 nike

我写了这个类:

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 类型,所以我不想使用 再次手动定义它。

在 CreateError 上,我手动定义 T 类没有问题,因为默认情况下它不知道。

仅在 Create 方法上,我需要这样做 ResultsPair<User>.Create(ResultsItem, User) .我不喜欢。 ResultsPair.Create(ResultsItem, User)应该够了。

有没有办法让它达到我想要的效果?

谢谢

最佳答案

您可以通过另外创建一个非通用类来实现此目的 ResultsPair使用通用方法 Create , CreateSuccessCreateError :

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

关于c# - 来自参数的通用 T 而不是手动指定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46031313/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com