再加上Tuple个班.NET4,我一直在努力决定在我的设计中使用它们是否是一个糟糕的 Select .在我看来,Tuple可以作为编写结果类的捷径(我相信还有其他用途).

因此:

public class ResultType
{
    public string StringValue { get; set; }
    public int IntValue { get; set; }
}

public ResultType GetAClassedValue()
{
    //..Do Some Stuff
    ResultType result = new ResultType { StringValue = "A String", IntValue = 2 };
    return result;
}

相当于:

public Tuple<string, int> GetATupledValue()
{
    //...Do Some stuff
    Tuple<string, int> result = new Tuple<string, int>("A String", 2);
    return result;
}

所以,撇开我忽略元组的可能性不谈,Tuple的例子是一个糟糕的设计 Select 吗?在我看来,它似乎没有那么杂乱,但没有那么self 记录和干净.也就是说,对于ResultType类型,后面很清楚类的每个部分的含义,但是您需要维护额外的代码.对于Tuple<string, int>,您需要查找并弄清楚每个Item代表什么,但编写和维护的代码更少.

您在这一 Select 上的任何经验都将不胜感激.

推荐答案

如果您同时控制创建和使用元组,那么它是非常棒的-您可以维护上下文,这对于理解元组是必不可少的.

然而,在公共API上,它们的效率较低.消费者(不是你)必须猜测或查找文档,尤其是像Tuple<int, int>这样的东西.

我会对私有/内部成员使用它们,但对公共/受保护的成员使用结果类.

This answer也有一些信息.

.net相关问答推荐

DotNet COM初始化问题

带有ASP.NET核心的Angular 项目模板.API试验

如何在dotnet中使用OpenTelemetry Prometheus导出器导出多个版本的度量?

使用CLR将数据从Excel导入SQL Server时出错

Blazor服务器应用程序需要在页面上点击才能与元素交互

向从 .NET 序列化的对象添加 Xml 属性

查找 2 个已知值之间的字符串

Web API 中基于令牌的身份验证,无需任何用户界面

使用字典作为数据源绑定组合框

.NET 中是否有一种简单的方法来获得数字的st、nd、rd和th结尾?

使文本框不可编辑

C# 编译为 32/64 位,或任何 cpu?

ObservableCollection<> 与 List<>

List 和 IEnumerable 的实际区别

加载程序集、查找类和调用 Run() 方法的正确方法

如何知道 DateTime 是否在 C# 中的 DateRange 之间

.NET 高级别的 .NET 4.0 和 .NET 4.5 的区别

.NET 图形库?

如何从 HashSet 中检索实际项目?

从不同程序集中的类名中解析类型