草庐IT

const-ref

全部标签

c# - C# 中的 private const 和 private readonly 变量之间有区别吗?

在C#中使用privateconst变量或privatestaticreadonly变量有区别吗(除了必须分配const一个编译时表达式)?因为它们都是私有(private)的,所以没有与其他库的链接。那会有什么不同吗?例如,它可以产生性能差异吗?实习字符串?有没有类似的? 最佳答案 好吧,您可以在属性中使用常量,因为它们作为编译时存在。您无法预测静态只读变量的值,因为.cctor可以从配置等初始化它。在使用方面,常量被嵌入到调用代码中。这意味着,如果您重新编译一个库dll来更改一个public常量,但不更改消费者,那么消费者仍将使

c# - 我应该使用 "ref"通过引用方法来传递集合(例如 List)吗?

我应该使用“ref”通过对方法的引用来传递列表变量吗?是否不需要“ref”的答案(因为列表将是一个引用变量),但是为了便于阅读,将“ref”放入? 最佳答案 字典是引用类型,所以不可能按值传递,尽管对字典的引用是值。让我试着澄清一下:voidMethod1(Dictionarydict){dict["a"]="b";dict=newDictionary();}voidMethod2(refDictionarydict){dict["e"]="f";dict=newDictionary();}publicvoidMain(){varm

c# - 我应该使用 "ref"通过引用方法来传递集合(例如 List)吗?

我应该使用“ref”通过对方法的引用来传递列表变量吗?是否不需要“ref”的答案(因为列表将是一个引用变量),但是为了便于阅读,将“ref”放入? 最佳答案 字典是引用类型,所以不可能按值传递,尽管对字典的引用是值。让我试着澄清一下:voidMethod1(Dictionarydict){dict["a"]="b";dict=newDictionary();}voidMethod2(refDictionarydict){dict["e"]="f";dict=newDictionary();}publicvoidMain(){varm

C# 不能在匿名方法体内使用 ref 或 out 参数

我正在尝试创建一个函数,该函数可以创建一个Action,该Action会递增传入的任何整数。但是我的第一次尝试是给我一个错误“无法在匿名方法体内使用ref或out参数”。publicstaticclassIntEx{publicstaticActionCreateIncrementer(refintreference){return()=>{reference+=1;};}}我理解为什么编译器不喜欢这样,但我仍然希望有一种优雅的方式来提供一个可以指向任何整数的漂亮的增量器工厂。我看到执行此操作的唯一方法如下所示:publicstaticclassIntEx{publicstaticAc

C# 不能在匿名方法体内使用 ref 或 out 参数

我正在尝试创建一个函数,该函数可以创建一个Action,该Action会递增传入的任何整数。但是我的第一次尝试是给我一个错误“无法在匿名方法体内使用ref或out参数”。publicstaticclassIntEx{publicstaticActionCreateIncrementer(refintreference){return()=>{reference+=1;};}}我理解为什么编译器不喜欢这样,但我仍然希望有一种优雅的方式来提供一个可以指向任何整数的漂亮的增量器工厂。我看到执行此操作的唯一方法如下所示:publicstaticclassIntEx{publicstaticAc

C# 不会编译在开头附近带有\0 的长 const 字符串

我遇到了一个特殊情况,在创建某些类型的字符串时出现以下错误:Unexpectederrorwritingdebuginformation--'ErrorHRESULTE_FAILhasbeenreturnedfromacalltoaCOMcomponent.'这个错误对StackOverflow来说并不新鲜(参见thisquestion和thisquestion),但是出现的问题与这个错误无关。对我来说,当我创建一个一定长度的const字符串时会发生这种情况,该字符串在开头附近的某处包含一个空终止字符(\0)。要重现,首先生成一个适当长度的字符串,例如使用:vars=newstring

C# 不会编译在开头附近带有\0 的长 const 字符串

我遇到了一个特殊情况,在创建某些类型的字符串时出现以下错误:Unexpectederrorwritingdebuginformation--'ErrorHRESULTE_FAILhasbeenreturnedfromacalltoaCOMcomponent.'这个错误对StackOverflow来说并不新鲜(参见thisquestion和thisquestion),但是出现的问题与这个错误无关。对我来说,当我创建一个一定长度的const字符串时会发生这种情况,该字符串在开头附近的某处包含一个空终止字符(\0)。要重现,首先生成一个适当长度的字符串,例如使用:vars=newstring

c# - 异步方法中的 ref 和 out 参数

有谁知道为什么async方法不允许有ref和out参数?我对此做了一些研究,但我唯一能找到的是它与堆栈展开有关。 最佳答案 Doesanyoneknowwhyasyncmethodsarenotallowedtohaverefandoutarguments?当然。想一想-异步方法通常几乎立即返回,远在大多数实际逻辑执行之前......这是异步完成的。所以任何out必须在第一个await之前分配参数表达式,并且很可能必须对ref进行一些限制参数以阻止它们在第一个await之后被使用无论如何表达,因为在那之后它们甚至可能无效。考虑使用o

c# - 异步方法中的 ref 和 out 参数

有谁知道为什么async方法不允许有ref和out参数?我对此做了一些研究,但我唯一能找到的是它与堆栈展开有关。 最佳答案 Doesanyoneknowwhyasyncmethodsarenotallowedtohaverefandoutarguments?当然。想一想-异步方法通常几乎立即返回,远在大多数实际逻辑执行之前......这是异步完成的。所以任何out必须在第一个await之前分配参数表达式,并且很可能必须对ref进行一些限制参数以阻止它们在第一个await之后被使用无论如何表达,因为在那之后它们甚至可能无效。考虑使用o

c# - 带有 ref 变量的 Func 委托(delegate)

publicobjectMethodName(reffloaty){//elided}如何为该方法定义一个Func委托(delegate)? 最佳答案 它不能通过Func来完成,但你可以为它定义一个自定义的delegate:publicdelegateobjectMethodNameDelegate(reffloaty);使用示例:publicobjectMethodWithRefFloat(reffloaty){returnnull;}publicvoidMethodCallThroughDelegate(){MethodName