首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么时候应该使用`out`参数而不是返回复杂类型?

在编程中,使用out参数而不是返回复杂类型的情况通常发生在以下场景:

  1. 性能优化:当需要返回多个值时,使用out参数可以避免创建临时变量,从而提高性能。
  2. 可读性:当函数有多个返回值时,使用out参数可以使代码更易读,因为它们直接在函数调用中被指定,而不是通过返回值进行赋值。
  3. 兼容性:当需要与现有代码或库进行交互时,使用out参数可以确保兼容性,因为它们不需要更改现有的返回语句。

以下是一个使用out参数的示例:

代码语言:csharp
复制
public void GetValues(out int value1, out string value2)
{
    value1 = 10;
    value2 = "Hello";
}

int val1;
string val2;
GetValues(out val1, out val2);

在这个示例中,GetValues函数使用out参数返回两个值,而不是创建一个复杂类型。这使得代码更易读,并且提高了性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

什么时候应该使用螺纹铣削不是丝锥加工螺纹?

4.如果使用丝锥,当然可以使用电火花打断折断的部分,但过程将非常复杂,如果对零件造成损坏,则会有损失。...如果使用螺纹铣刀,首先,由于力小,因此不容易折断;即使断裂,由于加工孔的直径大于刀具的直径,因此可以容易地取出折断部分。就产品产量而言,螺纹铣削比丝锥高得多。 5.形成粘性切屑不容易。...处理起来稍微容易一些,如果是小洞就很麻烦,比如: 在加工普通螺纹时,考虑到单件成本,螺纹铣削不是经济高效的。普通螺纹分类为一般硬度小于50HRC,直径小于38 mm的螺纹,尽管这并不是明显的分界线。...应用 CNC螺纹铣削 1.高硬度材料加工(硬度> 50HRC),适合螺纹铣削,因为铣削断屑,局部接触刀具小,刀片由硬质合金制成,磨损小,使用寿命长;一般的高速钢丝锥根本无法加工,例如使用整体硬质合金丝锥

18230

Java 方法详解

方法的定义 其基本语法为: 修饰符 返回类型 方法名(参数类型 参数名){ ... 方法体 ......以下是一个方法的所有组成部分: 修饰符: 可选,告诉编译器如何调用该方法,定义了该方法的访问类型返回类型 : 方法可能会有返回值,那么该返回值的数据类型就是该方法的返回类型。...有些方法执行所需的操作,但没有返回值。在这种情况下,方法的返回类型使用关键字void。 方法名: 是方法的实际名称。方法名和参数表共同构成方法签名。 参数类型参数像是一个占位符,又被称为形参。...,那么Java编译器会根据方法签名判断哪个方法应该被调用。...递归结构包括两部分: 递归头:什么时候不调用自身方法。如果没有递归头,将造成死循环。 递归体:什么时候调用自身方法。

47450

MyBatis XML详解

使用内联参数映射和 parameterType 属性。 resultType 从这条语句中返回的期望类型的类的完全限定名或别名。注意集合情形,那应该是集合可以包含的类型,不能是集合本身。...返回 map 是 MyBatis 最具力量的特性, 对其有一个很好的理解的话, 许多复杂映射的情形就能被解决了。使用 resultMap 或 resultType,但不能同时使用。...使用内联参数映射和 parameterType 属性。 flushCache 将其设置为 true,不论语句什么时候被带哦用,都会导致缓存被清空。默认值:false。...,比如结构体,但是当注册 out 参数时你必须告诉语句类型名称。...JDBC 类型是仅仅需要对插入,更新和删除操作可能为空的列进行处理。这是 JDBC jdbcType 的需要,不是 MyBatis 的。

56920

使用名词不是动词 2. Get方法和查询参数应该改变资源状态3. 使用名词的复数形式 4. 为关系使用子资源 5. 使用HTTP头决定序列化格式 6. 使

使用名词不是动词 为了易于理解,为资源使用下面的API结构: Resource Getread Postcreate Putupdate Delete /cars 返回一个car的列表 创建一个新的car...Get方法和查询参数应该改变资源状态 使用Put,Post和Delete方法替代Get方法来改变资源状态。不要使用Get来使状态改变: GET /users/711?...fields=manufacturer,model,id,color 分页 使用offset和limit来获取固定数量的资源结果,当其中一个参数没有出现时,应该提供各自的默认值,比如默认取第一页,或者默认取...前一页后一页的链接也应该在HTTP头链接中得到支持,遵从下文中的链接原则不要构建你自己的头: Link: <https://blog.mwaysolutions.com/sample/api/v1/cars...使用HTTP状态码处理错误 忽略错误处理的API是很难使用的,简单的返回500和调用堆栈是非常不友好也非常无用的: 使用HTTP状态码 HTTP标准提供了70多个状态码来描述返回值,我们不需要完全用到他们

2.7K50

Go语言中常见100问题-#9 Being confused about when to use generics

注意泛型与接口的区别,泛型是在编译时确定类型,接口是在运行时。对于什么时候使用泛型,什么时候不该使用泛型,很多人并不是很清楚。...函数接受任何类型作为入参,意味着正在失去Go作为静态语言的一些优势。并且对类型进行断言检查是在运行时而不是编译时完成的,因此如果提供的类型未知,还需要返回错误信息。...因此,有必要限制类型参数不是接受任何类型参数,以便键类型满足特定要求。在这里,key要具有可比较性(可以使用 == 或 !=). 因此,上面将key定义为可比较的类型不是任何类型。...在这种情况下,使用泛型不会带来任何价值,我们应该直接将w参数类型设置为io.Writer.使用interface作为参数更合适,可读性更强。...尽管泛型在特定场景下可能非常有用,但我们应该谨慎选择使用不是盲目使用。一般来说,当我们想回答什么时候使用泛型时,可以类比什么时候使用接口,它们有相似之处。

44920

Java 中到底是应该用接口类型 还是实现类的类类型去引用对象?

如题,Java 中到底是应该用接口类型 还是实现类的类类型去引用对象?首先贴出答案: 应该优先使用接口不是类来引用对象,但只有存在适当的接口类型时 。...换而言之,如果存在适当的接口类型,那么参数返回值和字段都应该使用接口类型。 如果你养成使用接口类型的习惯,你的程序将更加灵活。 如果没有合适的接口存在,则通过类来引用对象。...ClassB();//类类型的引用变量A 去接收对象地址 什么时候接口类型不适合做引用呢,我们看下面这个例子: interface A { //接口A //接口的方法声明必须是...我们回到我们文章开头的结论:应该优先使用接口不是类来引用对象,但只有存在适当的接口类型时 。...翻译过来大概就是: 如果存在适当的接口类型,那么参数返回值和字段都应该使用接口类型。 如果你养成使用接口类型的习惯,你的程序将更加灵活。 如果没有合适的接口存在,则通过类来引用对象是完全合适的。

1.6K30

我 JS 写的好好的,为什么要用那么复杂的TS

为什么我写了返回类型,VSCode还是提示返回值是any类型?泛型好复杂什么时候要用泛型?接口类型定义要写在哪? 来,我们掰开揉碎一点点讲。 TS是谁写给谁看/用的?..., 你会很清晰的通过VSCode的提示了解到该函数的参数返回值信息: image.png 不需要去看源码,要知道,一些复杂的方法,如果没有良好的注释,看源码都不一定能很快的判断出来参数返回类型...类型推断 其实也不是所有的变量或者返回值都需要手动去设置类型,通过类型推断[1],可以少些很多代码。...可以通过VSCode的提示检测是否正确推断了类型。 说的极端一点,TS就是为了让使用者爽,有更好的提示和约束,让你知道你是否有正确安全的使用提供的方法。不是为了增加你的工作量和心智负担。...类型定义在哪? 这个问题跟上面的问题是一样的,当你不知道这玩意什么时候用,那你应该是还用不到这个玩意儿。 简单的不重用的就直接写,如上面的示例方法。

1.1K10

写给前端新人 - 我 JS 写的好好的,为什么要用那么复杂的TS

为什么我写了返回类型,VSCode还是提示返回值是any类型?泛型好复杂什么时候要用泛型?接口类型定义要写在哪? 来,我们掰开揉碎一点点讲。 TS是谁写给谁看/用的?...image.png 不需要去看源码,要知道,一些复杂的方法,如果没有良好的注释,看源码都不一定能很快的判断出来参数返回类型。...类型推断 其实也不是所有的变量或者返回值都需要手动去设置类型,通过类型推断,可以少些很多代码。...可以通过VSCode的提示检测是否正确推断了类型。 说的极端一点,TS就是为了让使用者爽,有更好的提示和约束,让你知道你是否有正确安全的使用提供的方法。不是为了增加你的工作量和心智负担。...类型定义在哪? 这个问题跟上面的问题是一样的,当你不知道这玩意什么时候用,那你应该是还用不到这个玩意儿。 简单的不重用的就直接写,如上面的示例方法。

73520

Go中nil意义的理解

nil } 什么时候nil不是nil nil可以是一个nil接口/切片或者指针,是有实际意义的 type doError struct{ errorMessage string } func (err...改正:应该返回具体类型 * doError var err *doError return err //类型*doError是空的,但是它实现了接口 } func main(){...(){ err := wrapDo() //error(*doError,nil) fmt.Println(err == nil) // false } 正确的方式是: 不应该返回具体的错误类型...,无论如何都应该返回接口error 在过程中不要自行声明具体类型变量,无论如何都应该使用接口error变量 这种感觉,就是具体类型只出现在自己的实现中不出现在其他的任何地方。...nil的用法 在Go中,nil也是可以调用该类型的方法:(这个确实是有点出乎我的意料了,这个函数更接近于静态函数的实现不是成员函数。

51210

Java数组 强制类型转换

带着问题的 我 和 源码 展开了“深入”交流   参照源代码的时候发现,首先,Arrays.asList(data)依然返回的是泛型,也就应该是String[]。...因此,上述ArrayList的那个构造方法,传入参数时,应该是String[]。   ...虽然我不清楚它做了什么,但是有两点可以确定: 源代码既然在强转的时候没有报错,说明该方法的返回的实际对象一定是T子类的数组。T类型是什么呢?...也就是说,在二参数copyOf()返回时,返回类型必然和elementData是同一类型,那我们又假设elementData是String数组,最后toArray()返回不是String数组吗???...那说明elementData已经不是String类型了!那是什么时候变的呢?我们来到了它的构造方法: class ArrayList { ......

1.8K40

Java 10 var关键字详解和示例教程【面试+工作】

i = (int) list2.get(0) //需要进行转换,获得int 对于泛型,最好在RHS使用特定类型不是菱形运算符),如下所示: var list3 = new ArrayList<Integer...var类型与方法 我们先声明一个名为squareOf的方法,这个方法的参数为BigDecimal类型,并返回参数的平方,如下所示: BigDecimal squareOf(BigDecimal number...我们声明一个名为toIntgerList的方法,参数类型为List(泛型类型),并使用Streams API返回一个整数列表,如下所示: List<Integer...class Clazz { private var name;} 不允许使用var方法参数 void doAwesomeStuffHere(var salary){} 不能将var作为方法返回类型...你还可以使用JShell对复杂代码进行原型设计,不是重复编辑、编译和执行的传统繁琐流程。 最后,你了解了所有var类型的功能和限制,例如什么时候可以和不可以使用var。

1.1K30

《C++ primer》--第7章

习题7.8 举一个例子说明什么时候应该将形参定义为引用类型。再举一个例子说明什么时候应该将形参定义为引用。 解答: 如果希望通过函数调用修改实参的值,就应该将形参定义为引用类型。...另外,在向函数传递大型对象时,为了避免复制实参以提高效率,以及使用无法复制的类类型(其复制构造函数为private的类类型)作为形参类型时,也应该将形参定义为引用类型。...指针形参的优点是可以明确地表示函数所操纵的是指向数组元素的指针,不是数组本身,而且可以使用任意长度的实参数组来调用函数;其缺点是函数体不能依赖于数组的长度,否则容易造成数组内存的越界访问,从而产生错误的结果或者导致程序崩溃...引用形参的有点事在函数体中依赖数组的长度时安全的;其缺点是限制了可以传递的实参数组,只能使用长度匹配的实参数组来调用函数。 习题7.17  什么时候返回引用是正确的?...上面时候返回const引用是正确的? 解答: 返回指向在函数调用之前已存在的对象的引用时正确的。 当不希望返回的对象被修改时,返回const引用是正确的。

59450

Java函数式编程和Lambda表达式

什么是函数式编程 相信大家都使用过面向对象的编程语言,面向对象编程是对数据进 行抽象,函数式编程是对行为进行抽象。函数式编程让程序员能够写出更加容易阅读的代码。那什么时候函数式编程呢?...我们举个例子 下面的代码如果使用Java 7 的话应该这样写: //sort using java 7 private void sortUsingJava7(List names...String s1, String s2) { return s1.compareTo(s2); } }); } 代码里面需要实现一个匿名类,看起来是不是复杂...Lambda表达式需要一个函数式接口作为其对应类型它的方法体就是函数接口的实现。每一个该接口类型的Lambda表达式都会被匹配到该接口的抽象方法。...如果编译器无法推断你的参数类型,则需要手动指定。

69440

搞明白 Java 的通配符泛型

super E> 的向父类扩大泛型,向 action 取返回值有影响,向 action 传参数没有影响。 Consumer本身就是一个没有返回值的接口。...如果条件允许,比如这个函数中的 是根据参数类型确定的,我们应该优先使用 T,不是生搬硬套 PECS 原则。...那么既然总是可以通过输入的参数确定R,那 extends R 有什么用呢?这样写可以多一个功能,这样你可以显式修改 R 的类型,从而改变返回类型。...flatMap(integer -> Stream.of(1, 2)); 原来应该返回 Stream ,但是现在被我在 flatMap 前面用 显式指定了 R 的类型,这样子 最后返回...因为 PECS 最大的问题是它只告诉你用通配符泛型的情景下你应该如何选择,没有告诉你什么时候用 通配符泛型,什么时候不用。

50320

golang-flag - 命令行参数解析

如果命令行参数纯粹自己写代码解析,对于比较复杂的,还是挺费劲的。在 go 标准库中提供了一个包:flag,方便进行命令行解析。...这样,使用者是这么调用:flag.Parse() 不是 flag. CommandLine.Parse()。...方法参数 arguments 不包括命令名,即应该是os.Args[1:]。事实 从参数列表中解析定义的 flag。方法参数 arguments 不包括命令名,即应该是os.Args[1:]。...CommandLine.Parse(os.Args[1:]) } 该方法应该在 flag 参数定义后具体参数值被访问前调用。...我们需要了解解析什么时候停止。 根据 Parse() 中 for 循环终止的条件(不考虑解析出错),我们知道,当 parseOne 返回 false, nil 时,Parse 解析终止。

69440

简单工厂模式——接口和抽象类

定义 官方定义 定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。 通俗解读 我们不必关心对象的创建细节,只需要根据不同参数获取不同产品即可。...SportsCar(){ this.color="red"; } @Override public void run() { System.out.println...什么时候用接口,什么时候用抽象类? 接口和抽象类有什么区别? 接口是针对方法的整合,抽象类是针对子类的整合。 人有男人,女人,人是抽象类。人可以吃东西,狗也可以吃东西,吃东西这个动作是接口。...接口中基本数据类型为static, 抽象类不是。 抽象类有构造器,方法可以实现,除了不能被实例化,和普通类没有区别,接口不是什么时候用接口,什么时候用抽象类?...应用场景 工厂类负责创建对的对象比较少,因为不会造成工厂方法中的业务逻辑过于复杂 客户端只知道传入工厂类的参数,对如何创建对象不关心 由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用

58820

第五章:面向对象编程

对于简单的流程是适合使用面向过程的方式进行的。复杂的流程不适合使用面向过程的开发方式。 面向对象:关注点在实现功能需要哪些对象的参与 OO:Object Oriented 面向对象。...构造方法不需要提供返回类型。 如果提供了返回类型,那么这个方法就不是构造方法了 ,就变成普通方法了。 构造方法怎么调用呢?...条件3:不同的参数列表:类型,个数,顺序 方法重载机制属于编译阶段的功能 方法重载机制是给编译器看的。 方法覆盖/override/方法重写/overwrite 什么时候考虑使用方法重写?...即一个类应该对自己需要耦合或调用的类知道得最少。 合成复用原则:尽量使用对象组合和聚合,不是继承来达到复用的目的。...System.out.println(this); // super本身不是一个引用。super只是代表了当前对象的父类型特征那部分。 // super 不能够单独的输出。

9911

Java学习历程之----进阶篇(十一)

2、声明方式的不同,基本类型无需通过new关键字来创建,封装类型则需new关键字。...,比如int类型的初始值为0,boolean类型为false; 5、使用方式的不同,比如与集合类合作使用时只能使用包装类型。...6、什么时候该用包装类,什么时候该用基本类型,看基本的业务来定:这个字段允不允许null值,如果允许,则必然要用封装类;否则,基本类型就可以了。...("n = " + n); Integer num = 99; System.out.println("obj等价于num返回结果为" + obj.equals...由于小编的电脑出了故障,所以编程都是用的线上编程工具,下面是上周的习题参考答案,线上编程系统的交互性不是很好,不能在程序运行过程中传入参数,所以我直接给定值,处理比较粗糙,还望大家见谅,那么我们下期再会

25810
领券