传递List <t>和bool </t>

时间:2013-09-11 09:50:18

标签: c#

List<T>bool作为方法的返回值传递的最佳方法是什么?现在我有一个名为BoolList的自定义类,就像一个容器,但我想知道是否有更好和/或更优雅的方法。

3 个答案:

答案 0 :(得分:4)

为什么不使用元组?

http://www.dotnetperls.com/tuple

http://msdn.microsoft.com/en-us/library/dd268536.aspx

然后你有一个类型安全的容器,而不必创建一个类。

    private Tuple<List<int>, bool> myMethod()
    {
        var myList = new List<int>();
        var myBool = true;

        return new Tuple<List<int>, bool>(myList, myBool);
    }

答案 1 :(得分:3)

您可以使用Tuple<List<T>, bool>

public Tuple<List<string>, bool> MethodName()
{
    return Tuple.Create(new List<string>(), true);
}

或制作List<T> out参数并返回bool为正常参数(如TryParse方法一样)

public bool MethodName(out List<string> results)
{
    results = new List<string>();
    return true;
}

答案 2 :(得分:1)

如前所述,您可以使用元组,这是一个很好的解决方案。唯一的缺点是您使用非信息性名称Item1,Item2引用元组中的项目...如果您要经常返回相同类型,或者您将结果传递描述性属性提高可读性,那么另一种(老式的)方法是将一个类(或者在本答案中进一步描述的结构)与返回类型作为属性并返回该类的实例。例如,类定义可以是当前类的本地定义。

public class EmployeeSearchResult
{
    public List<Employee> Employees{get;set;}
    public bool Success{get;set;}
}

private EmployeeSearchResult Search()
{
    var employeeSearchResult = new EmployeeSearchResult();
    employeeSearchResult.Employees = new List<Employee>();
    employeeSearchResult.SearchSuccess = true;
    return employeeSearchResult;
}

由于返回通常是小而轻,寿命短,因此结构可能是比类更好的选择。但是,请注意结构是否合适 - 按照msdn: -

  

√考虑到如果实例,则定义结构而不是类   类型很小,通常是短暂的或通常嵌入   其他对象。

     

X AVOID定义结构,除非类型具有全部结构   具有以下特点:

     
      
  • 它逻辑上表示单个值,类似于原始类型(int,double等)。
  •   
  • 它的实例大小小于16个字节。
  •   
  • 这是不可改变的。
  •   
  • 不必频繁装箱。
  •