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

为什么.NET中的'out'参数是个坏主意?

在.NET中,'out'参数被认为是一个坏主意,主要原因是它可能导致不可预测的行为和不稳定的代码。

首先,'out'参数是一种特殊的参数类型,它表示参数是一个输出值,而不是一个输入值。这意味着在调用函数之前,必须先为参数分配一个值。然而,由于'out'参数是一个引用类型,因此在函数内部可以修改这个值。这可能导致不可预测的行为,因为在调用函数时,你可能不知道函数内部会如何修改这个值。

其次,'out'参数可能导致不稳定的代码,因为它允许函数修改传递给它的变量。这意味着,如果你在函数内部修改了一个变量,那么在函数返回后,你可能会发现这个变量已经被修改。这可能导致代码难以维护和调试,因为你可能不知道哪些函数会修改你的变量。

因此,在.NET中,应该避免使用'out'参数,而是使用其他方法来返回多个值。例如,可以使用元组、自定义类或者泛型集合来返回多个值。这些方法更加清晰和可预测,可以使代码更加稳定和易于维护。

推荐的腾讯云相关产品和产品介绍链接地址:

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

相关·内容

为什么多线程坏主意

用户层面的编程工具 被认为多种问题一种通用解决方案 每一程序员都需要成为 一多线程编程高手吗?...替代性方案: 使用事件驱动编程方法 特别声明: 对于大部分多线程程序,使用事件驱动更好选择 只有当使用CPU多核时候, 才需要使用多线程编程 2 多线程本质 ?...就会导致受污染数据 死锁 依赖锁,会导致循环依赖 每个处理程序等待其他处理程序: 导致系统挂起 ? 6 为什么多线程编程很难?...难以调试: 因为 数据依赖,时间依赖 线程破坏了抽象: 无法设计出模块化程序 因为锁导致回调无法完成 ? 7 为什么多线程编程很难?...对于多CPU机器来说,可以扩展性能 可以长时间运行处理程序而不需要冻结 13 你需要放弃多线程吗?

95320

C# Out 和 Ref 及Params 参数

out 和ref 参数 经常用来通过方法传递参数来获取值,当您方法不只有一返回值时候,这两参数就发挥作用了。ref传递参数地址,out返回值,两者有一定相同之处,不过也有不同点。 ...在这篇文章里,我将解释如何在c#应用中使用这两参数。   1、out 参数   out 方法参数关键字使方法引用传递到方法同一变量。...当控制传递回调用方法时,在方法参数所做任何更改都将反映在该变量。  ...当控制传递回调用方法时,在方法参数所做任何更改都将反映在该变量。 ...在方法声明 params 关键字之后不允许任何其他参数,并且在方法声明只允许一 params 关键字。

1.1K10

ASP.NET WebAPI 参数绑定

ASP.NET WebAPI 参数绑定 当 WebAPI 调用 Controller 上方法时, 必须为其参数赋值, 这个过程就是参数绑定。...比如一典型 WebAPI 方法: IHttpActionResult Put(int id, Product item) { ... } 参数 id 简单类型, 所以从 request URI...取值, 而参数 item 复杂类型, 则从 request 正文 (body) 取值。...标头来选择正确格式, 在上面的例子, Content-Type application/json , request正文 (body) 内容原始 JSON 字符串, 而不是一 JSON...HttpParameterBinding 实例函数; 最后, 使用上面提到默认规则: 如果参数简单类型或者指定了类型转换器, 从 URI 绑定, 相当于在参数上添加 [FromUri

2.5K10

vue组件data为什么函数

组件可复用vue实例,一组件被创建好之后,就可能被用在各个地方,而组件不管被复用了多少次,组件data数据都应该是相互隔离,互不影响,基于这一理念,组件每复用一次,data数据就应该被复制一次...,之后,当某一处复用地方组件内data数据被改变时,其他复用地方组件data数据不受影响,如下面这个例子: ?...该组件被复用了三次,但每个复用地方组件内count数据相互不受影响,它们各自维护各自内部count。 ?...能有这样效果正是因为上述例子data不是一单纯对象,而是一函数返回值形式,所以每个组件实例可以维护一份被返回对象独立拷贝,如果我们将上述例子data修改为: ?...那么就会造成无论在哪个组件里改变了count值,都会影响到其他两组件里count。 ?

1.2K20

为什么vuedata必须函数?

引用类型与函数区别 引用类型与函数 object引用类型,如果不用function返回,每个组件data都是内存同一地址,一数据改变了其他也改变了。...js只有函数构成作用域(只有函数{}构成作用域,对象{}以及if(){}都不构成作用域),data函数时,每个组件实例都有自己作用域,每个实例相互独立,不会互相影响。...,那么当你修改其中一属性时候,另外一实例也会跟着改; 两实例必须有自己各自作用域才行,需要通过下列方法进行处理 const Mycomponent = function(){ this.data...= this.data(); } Mycomponent.prototype.data = function(){ return { a: 1, b: 2 } } 这样每一实例...这是js本身特性带来,跟vue本身设计无关。

98010

PostgreSQL.NET驱动程序Npgsql参数对象Bug

上面定义一存储过程updateattention,它有一自定义类型 citext,用于将字符串类型换成不区分大小写类型,它定义如下: CREATE OR REPLACE FUNCTION citext...thread_id=637&forum_id=519 文中有人说,可能参数类型转换问题,但我这里只是将参数进行了大小写转换,应该不会有类似Int32到Int64这类问题。...无赖,只有将调用存储过程.NET程序代码一排查,当注释掉 para.DbType = DbType.AnsiString; 时候,程序居然能够正常运行通过了!...第一次有这个念头我都觉得不可思议,因为以前在VS2008时候曾经调试过类似的代码,赶紧将上面的.net代码参数对象换成其它数据库类型参数对象试试看: //获取PostgreSQL数据访问对象...故此,得到结论: PostgreSQL.NET数据访问驱动程序参数对象DbType属性存在一设置成AnsiString之后查看该属性结果却是StringBug!

1.4K70

spark redis 碰到java.net.SocketTimeoutException: Read timed out问题解决

jedis来连接,因此也就说明jedis问题。...针对这一问题,之前直接都是利用 val client = new Jedis(ip, port)方法,嵌套在dataframe.foreach()方式。...由于之前部署流式数据处理,所以每次处理间隔都非常短,因此没有任何问题。但是这回为了查看一数据想缓存到spark时候,发现了这个BUG。也才具体发现以前程序设置不合理地方。...,可以来设置里面的timeout参数,默认2000。...根据大概程序写入redis数据量和时长来设置即可。 由于本来写入数据量大概有7亿多条记录,为了方便,拆分了400小片断分开写入,再用上述默认设置,也能够通过。

5.7K60

Vue data 为什么必须函数

为什么 Vue data 必须函数? 官方文档解释如下: ? ? 为什么会出现上述“影响到其它所有实例”情况呢?...componentB = new Component() componentA.data.age = 40 console.log(componentA, componentB) // 40 14 这就很好解释了为什么...Vue 组件 data 需要用函数了,当 data 函数时候,每一实例 data 属性都是独立,互不影响 总结 Vue data 必须函数,因为当 data 函数时,组件实例化时候这个函数将会被调用...,返回一对象,计算机会给这个对象分配一内存地址,实例化几次就分配几个内存地址,他们地址都不一样,所以每个组件数据不会相互干扰,改变其中一组件状态,其它组件不变 简单来说,就是为了保证组件独立性和可复用性...,如果 data 函数的话,每复用一次组件就会返回新 data,类似于给每个组件实例创建一私有的数据空间,保护各自数据互不影响

1.2K20

Python函数参数如何传递

前言 Python函数大家应该不陌生,那函数参数如何传递,你知道吗?我们先看一下下面的代码,和你想预期结果是不是一样了?...# [1, 2, 3, 4] l值发生了变化 为什么会出现这样结果了,带着这个疑问,我们往下学。...变量赋值 在我告诉你们Python函数参数如何传递之前,我们要先学习一下变量赋值背后逻辑。我们先看一简单代码。...a = a + 1后,由于int类型数据不可变数据类型,所以就创建了一2对象,变量a指向2这个对象。 那列表这种可变数据类型就不一样了。...Python函数参数传递 我先说结论,Python函数参数传递对象引用传递。我们举个例子。

3.6K20

Mapkey为什么无序

为什么无序?...首先,我们先看下goruntime如何实现map迭代,以go 1.21.6为例,以下关键部分,完整源码位于src/runtime/map.go: func mapiterinit(t *maptype...因为每次迭代起始位置都是不固定,所以我们每次for range map结构可能都是不一样为什么要这样做?...在 Go 语言中,map 无序主要是为了维护 map 高效性能和简化实现。以下一些关于为什么选择无序键考虑: 1.高效性能:无序键 map 在插入、查找和删除等操作上具有高效性能。...这是通过一有序哈希表实现,使得在遍历 map 时能够按照键插入顺序进行。这种方式在一些应用场景中提供了方便,但在整体设计仍然保持了 map 键无序性。

14410

SDN已经Out了?Out了! 从三应用案例看SDN在企业网发展

SDN从诞生以来就争议缠身,传统势力说SDN就是皇帝新衣,无非运维自动化;新兴厂商说SDN前所未有的革命,要被革命传统厂家一叶障目。...到了2017年,争论声音依然没有停息,我们从三SDN案例来管中窥豹,看看SDN在2017以及未来发展。 ?...超级碗转播方之一FOX电视台已经将SDN技术应用于超级碗转播,通过SDN技术FOX实现报文在网络更细粒度控制,压缩后视频流在全美境内网络传送就是靠SDN控制器做流量调度。...点评:SDN不是万能,但是在特定场景SDN超能。这不是SDN在广电第一案例,广电领域有老大叫索尼,索尼在全球大规模推广4K IP转播车。...点评:大家好才是真的好,Google利用全局控制提升链路利用率设计思路,放大看可以解决运营商效率问题,缩小看可以解决企业用户体 验问题。

67070

SDN已经Out了?Out了! ——从三应用案例看SDN在企业网发展

SDN从诞生以来就争议缠身,传统势力说SDN就是皇帝新衣,无非运维自动化;新兴厂商说SDN前所未有的革命,要被革命传统厂家一叶障目。...到了2017年,争论声音依然没有停息,我们从三SDN案例来管中窥豹,看看SDN在2017以及未来发展。 ?...超级碗转播方之一FOX电视台已经将SDN技术应用于超级碗转播,通过SDN技术FOX实现报文在网络更细粒度控制,压缩后视频流在全美境内网络传送就是靠SDN控制器做流量调度。...点评:SDN不是万能,但是在特定场景SDN超能。这不是SDN在广电第一案例,广电领域有老大叫索尼,索尼在全球大规模推广4K IP转播车。...点评:大家好才是真的好,Google利用全局控制提升链路利用率设计思路,放大看可以解决运营商效率问题,缩小看可以解决企业用户体 验问题。

1.1K40

为什么在深度学习,AlphaGo Zero巨大飞跃?

AlphaGo ZeroDeepMind自动操作系统最新化身。有人可能会认为,在围棋击败人类世界冠军很难。...该网络通过将自身与外部训练数据进行比较,而不是从先前版本神经网络获得合成数据来学习。 第四点,在之前系统,它只需要4Google TPUs,而之前需要48TPUs。...在这两种情况下,你都有两在训练互相馈送网络。 每个人都应该想到重要问题:“AlphaGo Zero算法有多普遍?”DeepMind曾公开表示,他们将把这项技术应用于药物研发领域。...也就是说,在一系列行为结果没有不确定性,行为效果可以预测。简而言之,博弈行为可以预测。 然而,在许多真实世界环境,我们仍然可以建立精确虚拟世界。...事实上,在不同游戏中,需要做出不同决策。 最后,还有一问题,即基于游戏变化对现实世界适用性。现实世界交互更加动态和连续,而且交互时间无界。博弈游戏动作有限

88780

Java String 为什么不可变

什么不可变对象? 众所周知, 在Java, String类不可变。那么到底什么不可变对象呢? 可以这样认为:如果一对象,在它创建完成之后,不能再改变它状态,那么这个对象就是不可变。...对象在内存一块内存区,成员变量越多,这块内存区占空间越大。引用只是一4字节数据,里面存放了它所指向对象地址,通过这个地址可以访问对象。...除此之外还有一hash成员变量,该String对象哈希值缓存,这个成员变量也和本文讨论无关。在Java,数组也是对象。 所以value也只是一引用,它指向一真正数组对象。...也是为什么像下面这样调用不会改变对象值: String ss = "123456"; System.out.println("ss = " + ss); ss.replace('1', '0');...从上文可知String成员变量private final ,也就是初始化之后不可改变。那么在这几个成员, value比较特殊,因为他引用变量,而不是真正对象。

1.8K01

JavaString为什么不可变

什么不可变对象? 众所周知, 在Java, String类不可变。那么到底什么不可变对象呢? 可以这样认为:如果一对象,在它创建完成之后,不能再改变它状态,那么这个对象就是不可变。...对象在内存一块内存区,成员变量越多,这块内存区占空间越大。引用只是一4字节数据,里面存放了它所指向对象地址,通过这个地址可以访问对象。...除此之外还有一hash成员变量,该String对象哈希值缓存,这个成员变量也和本文讨论无关。在Java,数组也是对象。 所以value也只是一引用,它指向一真正数组对象。...也是为什么像下面这样调用不会改变对象值: String ss = "123456"; System.out.println("ss = " + ss); ss.replace('1', '0');...从上文可知String成员变量private final ,也就是初始化之后不可改变。那么在这几个成员, value比较特殊,因为他引用变量,而不是真正对象。

66530
领券