Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 传递列表<;T>;和一个笨蛋_C# - Fatal编程技术网

C# 传递列表<;T>;和一个笨蛋

C# 传递列表<;T>;和一个笨蛋,c#,C#,传递列表和bool作为方法返回值的最佳方式是什么?现在我有一个名为BoolList的自定义类,它的作用类似于容器,但我想知道是否有更好和/或更优雅的方法来实现它。为什么不使用元组 这样就有了一个类型安全的容器,而无需创建类 private Tuple<List<int>, bool> myMethod() { var myList = new List<int>(); var myBool = true;

传递
列表
bool
作为方法返回值的最佳方式是什么?现在我有一个名为
BoolList
的自定义类,它的作用类似于容器,但我想知道是否有更好和/或更优雅的方法来实现它。

为什么不使用元组

这样就有了一个类型安全的容器,而无需创建类

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

        return new Tuple<List<int>, bool>(myList, myBool);
    }
private Tuple myMethod()
{
var myList=新列表();
var myBool=true;
返回新的元组(myList,myBool);
}
您可以使用
元组


如前所述,您可以使用元组,这是一个很好的解决方案。唯一的缺点是使用非信息性名称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;
}
公共类EmployeeSearchResult
{
公共列表雇员{get;set;}
公共bool成功{get;set;}
}
私人雇员搜索结果搜索()
{
var employeeSearchResult=新的employeeSearchResult();
employeeSearchResult.Employees=新列表();
employeeSearchResult.SearchSuccess=true;
返回employeeSearchResult;
}
由于返回通常很小、很轻且寿命很短,因此结构可能是比类更好的选择。但是,请注意结构何时合适-根据:-

√ 如果是实例,请考虑定义结构而不是类。 类型很小,通常寿命很短,或者通常嵌入到 其他物体

避免定义结构,除非该类型具有所有 以下特点:

  • 它在逻辑上表示单个值,类似于基本类型(int、double等)
  • 它的实例大小小于16字节
  • 它是不变的
  • 它不必经常装箱

使用一个元组或使用一个out参数,其类型由一个
bool
和一个
List
组成。而不是
返回新元组(myList,myBool)
您还可以编写
返回Tuple.Create(myList,myBool)。稍微短一点。使用方法调用(
Create
)编译器可以推断类型参数,但是使用
new
表达式必须指定它们。如果您有多个项,我同意这是一个更好的解决方案。不过,我通常使用结构而不是类。这是一个很好的观点,只要使用遵循使用结构的指导原则。我会更新我的答案。@Strum,这很好,很快,但是,你不觉得名称
Item1
Item2
缺乏上下文含义吗。如果您已经有一个自定义类
BoolList
,它构成了所需的类型,那么您可以为访问器命名,以传递额外的上下文。
public bool MethodName(out List<string> results)
{
    results = new List<string>();
    return true;
}
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;
}