将List<T>
和bool
作为方法的返回值传递的最佳方法是什么?现在我有一个名为BoolList
的自定义类,就像一个容器,但我想知道是否有更好和/或更优雅的方法。
答案 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个字节。
- 这是不可改变的。
- 不必频繁装箱。