问题标签 [callermembername]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 抑制 C# 中的“成员从未分配给”警告
我有以下代码:
使用 ReactiveUI INPC 支持。编译器总是警告我Trochoid
从未分配过并且永远为空。然而,由于RaiseAndSetIfChanged
通过CallerMemberName
支持执行的魔法,代码确实有效并且编译器是错误的。
如何在我的代码中干净地抑制这些警告?
c# - MVVM CallerMemberName 和“魔术字符串”
新的 C# 5.0 版本引入了一些东西来摆脱 INotifyPropertyChanged 实现中的“魔术字符串”,例如:
现在可以只写:
由于方法定义中的 CallerMemberName ,这是可能的:
它比“魔术字符串”方式更易于重构,并且比 lambda 表达式更快,但我想知道我们如何从一组访问器中多次调用 OnPropertyChanged。例如,如果我们想要这样的东西:
我们如何使用 CallerMemberName 方式做到这一点并避免使用“魔术字符串”和 lambda 表达式?
我还想知道如何避免在 IDataError 信息中使用“魔术字符串”:
我是 MVVM 的新手,所以也许我忽略了一些处理“魔术字符串”的聪明方法,但是我做了一些研究,却一无所获。
c# - 覆盖 GetEnumerator 的默认行为
我有一个要求,我需要知道GetEnumerator()
.
我能想到的最好的方法可能是将默认行为覆盖到GetEnumerator
我创建的行为上,GetEnumerator([CallerMemberName]string caller = null)
但我似乎无法这样做,因为任何调用它的东西仍然会使用原始行为。
一些调用代码的示例可能是
目的是我想知道"button1_click"
例如GetEnumerator()
方法
c# - 为什么呼叫者信息属性以它们的方式实现?
当前实现的缺点:
- 它们违反了 DRY 原则,因为您必须在需要它们的任何地方重写参数
- 它们破坏了实现隐藏,因为您必须在接口中指定这些参数 - 即使您的接口实现中只有一个需要它们
- 它们弄脏了您的界面,用户在自动完成、文档等中看到它们。
为什么语言设计者决定反对更有用的东西,例如:
我猜这个实现缺少一些特性:例如,如果 Foo() 是一个实现 IFoo 的类并且 IFoo 在另一个程序集中,那么任何 IFoo 的调用者应该如何在编译时知道该信息是必需的——他不知道。
但!记录这仅在一个“构建步骤”内有效而不是产生无法作为当前实现的东西不是更好吗?
Q1:是否有官方文档说明为什么会以现在的方式实施?
Q2:有人知道其他语言的更好解决方案吗?
c# - .NET 4.0 中的 CallerMemberName 不起作用
我正在尝试CallerMemberName
通过 BCL 可移植包在 .NET 4.0 中使用属性。它总是返回一个空字符串而不是成员名称。我究竟做错了什么?
c# - WPF 通知 PropertyChanged 获取属性
我已经INotifyPropertyChanged
使用CallerMemberName
因此,这可以在任何属性的设置器中调用,因为OnPropertyChanged()
它会在设置属性时通知属性更改事件。对于仅作为 getter 的属性而言,情况并非如此。例如,
OnPropertyChanged()
DateOfBirth 工作正常,但要通知 Age 已更改,我应该记得OnPropertyChanged("Age")
在DateOfBirth
. 我觉得这使得代码随着时间的推移难以维护。如果一个新属性依赖于年龄,那也需要在 DateOfBirth 的设置器中通知。有没有更好的方法可以在不调用 OnPropertyChanged("Age") 的情况下做到这一点?
c# - 在实施 INotifyPropertyChanged 时,[CallerMemberName] 是否比替代方案慢?
有很好的文章提出了不同的实现方式INotifyPropertyChanged
。
考虑以下基本实现:
我想用这个替换它:
但有时我读到该[CallerMemberName]
属性与替代品相比性能较差。这是真的吗?为什么?它使用反射吗?
c# - 获取调用者方法名称 - 反射和 CallerInfo 属性
StackTrace
刚刚对使用和的性能进行了基准测试CallerInfo Attributes
。
令人震惊的是,我发现StackTrace
尽管在我阅读的每个地方,使用都快得多To get the caller method name, the preferred approach is CallerInfo attributes
。
输出:在 1000 次迭代中使用 StackFrame 检索调用方名称的经过时间 =9.48074760000001
在 1000 次迭代中使用 callerInfo 属性检索来电者姓名的经过时间 =21.7074064
我有什么误解吗?使用CallerInfo
属性是首选方法吗?
感谢以下答案的指出。
每次循环中我都必须重新启动计时器。
那么,谁赢了?正如下面的答案所说,CallerInfo
。因为,它是一个编译时特性并且速度更快。
在 1000 次迭代中使用 StackFrame 检索调用方名称的经过时间 =0.00762619999999992
在 1000 次迭代中使用 callerInfo 属性检索来电者姓名的经过时间 =0.00639420000000002
我使用了以下代码(已修改)并得到了上述结果。
c# - 为什么 C# 调用者信息属性需要默认值?
我刚刚遇到了 C# 5 调用者信息属性 ( http://msdn.microsoft.com/en-us/library/hh534540.aspx )。
这似乎是一个非常有用的功能,我已经阅读了一些文档(http://www.codeproject.com/Tips/606379/Caller-Info-Attributes-in-Csharp)。
但是,我只是想知道:为什么必须传入默认值?它们是如何使用的?
以下示例代码显示了如何使用调用者信息属性:
我的问题是: 、 和 的默认值null
是null
什么-1
?上面的代码与以下代码有何不同:
按照我的理解,这些是可选参数,编译器提供默认值,替换我们分配的任何默认值。在那种情况下,我们为什么要指定默认值?是否存在一些奇怪的边缘情况,编译器可能无法填写值,并诉诸我们提供的默认值?如果不是,那么为什么要求我们输入这些数据?要求开发人员提供永远不会使用的默认值似乎相当笨拙。
免责声明:我尝试用谷歌搜索,但我找不到任何东西。我几乎不敢问关于 SO 的问题,因为大多数这样的新手问题都会遇到这样的敌意,但作为最后的手段,我会冒险提出一个问题。版主/高级用户,无意冒犯 - 在发布此之前,我确实尝试过在其他地方查找信息。
c# - 获取类名
如何获得class-name
with caller info attributes
。
我strongly say a no
使用反射记录类名。
能够使用[CallerMemberName]
以下方法获取方法名称:
如何使用Caller Info Attributesclass name
在此处记录?