元组或对象数组最好从C#中的多个值的方法返回?

sha*_*raj 5 .net c#

我目前的代码是

object[] method()
{
returning new object[] {"",12,} like this ?
}
Run Code Online (Sandbox Code Playgroud)

Tuple是一个更好的选择吗?

我在这里得到了一些关于元组性能的信息

请建议一个很好的选择..

该课程经常使用,请求频繁.

UPDATE

返回值在不同方法中有所不同.我有所有方法返回的值从2到10为最大值.

逻辑是我将sp [MS SQL存储过程]逻辑转换为等效的mongoDb(所有数据都存在)

因此对于sp,一个方法应该以sp返回的形式返回.在sp中,使用OUT参数并且它也返回一些整数值.

在替换即时通讯中使用

object[] method(out int returnValue)
 {
 }
Run Code Online (Sandbox Code Playgroud)

returnValue用于错误代码,object []用作sp的out参数的返回类型.

什么是最好的方法呢?

Pet*_*tai 10

您还有第3个选项:简单类型的结果类或具有属性的结构.如果您返回的不超过3件物品,则元组没问题.

在C#中返回一个对象数组是一种不好的做法 - 尝试尽可能地键入.作为一般的经验法则,您正在为您的开发人员创建代码(以便他/她可以轻松地使用/修改它)而不是计算机.让框架进行优化.

  • 这一次.尝试在这里使用元组只是试图变得懒惰,但它不会产生可读,可维护的代码.7个月后,`.Item6'对读者意味着什么?所以是的:这个. (4认同)

Jak*_*cki 5

我只是创建一个新的class并返回它的实例。由于正确的属性名称而不是Item1, ,这为您提供了类型安全性和可读性Item2

而不是数组返回IEnumerable<>- 这样您就可以更改方法的实现(例如通过引入yield return)而不会破坏消费者。

请记住

过早的优化是万恶之源


Fed*_*dor 5

Tuple<string,string>对于任何可能对和之间的性能差异感兴趣的人

class MyClass 
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我用DotNetPearls的修改测试对其进行了测量,结果是:

项目数 = 1 000 000

8.27 ns -- 分配元组
7.28 ns -- 分配对象

2.46 ns -- 将元组作为参数传递
2.28 ns -- 将对象作为参数传递

2.16 ns -- 返回元组
2.31 ns -- 返回对象

3.12 ns -- 从列表中加载元组
3.12 ns -- 从列表中加载对象

Tuple因此,至少在这种情况下使用没有性能原因