C#在单独的输出参数中提供额外输出是否是一种不好的做法?

C#在单独的输出参数中提供额外输出是否是一种不好的做法?,c#,output,C#,Output,我有一个具有以下签名的方法: bool DoSomething(); 我想将其更改为: bool DoSomething(IList<int> newIDs); bool DoSomething(IList newIDs); 布尔值和ID列表彼此不相关。新方法包含一个额外的输出,其中包含新ID的列表。这是坏习惯吗?在这种情况下,返回多个值的正确方法是什么?有一种称为TryParse模式的常见模式,在C#基类库中广泛使用,它与函数签名基本相同 例如: 我认为,如果您包含“out”

我有一个具有以下签名的方法:

bool DoSomething();
我想将其更改为:

bool DoSomething(IList<int> newIDs);
bool DoSomething(IList newIDs);

布尔值和ID列表彼此不相关。新方法包含一个额外的输出,其中包含新ID的列表。这是坏习惯吗?在这种情况下,返回多个值的正确方法是什么?

有一种称为TryParse模式的常见模式,在C#基类库中广泛使用,它与函数签名基本相同

例如:

我认为,如果您包含“out”关键字,那么使用此选项是可以的

编辑:

同时为函数指定一个名称,明确它返回null的原因。

您还可以将所有返回值“包装”到对象中:

public class Payload
{
    public List<int> NewIDs { get; set; }
    public bool Status { get; set; }
}

//Use Payload class

public Payload DoSomething(...){...}
公共类有效负载
{
公共列表NewIDs{get;set;}
公共布尔状态{get;set;}
}
//使用有效负载类
公共有效载荷剂量测量(…){…}
我认为在决定特定模式之前,理解返回值的语义是很重要的。如果你用细节编辑你的问题,我也会提供更多的见解


干杯

这是一个非常主观的问题,
DoSomething()
对于您的解决方案是否合理,我们没有任何线索。如果此方法的主要目的是获取这些ID,那么我建议使用类似于
IEnumerable DoSomething()
的签名。布尔值和ID彼此不相关。您完全是在猜测OP的情况。是的,我假设布尔值意味着成功或失败。如果这不是目的,看起来也不是,那么我不建议这样做,我会支持Luc的回答。
public class Payload
{
    public List<int> NewIDs { get; set; }
    public bool Status { get; set; }
}

//Use Payload class

public Payload DoSomething(...){...}