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;
}