问题标签 [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.

0 投票
5 回答
4435 浏览

c# - 当不能简单地重载时混合可选参数和参数

这个问题类似,我想将可选参数与 params 关键字混合,这当然会产生歧义。不幸的是,创建重载的答案不起作用,因为我想利用调用者信息属性,如下所示:

创建没有可选参数的重载会更改调用站点,从而阻止这些特定参数正常工作。

我找到了一个几乎可以工作的解决方案(虽然它很丑):

这里的问题是,如果您为最后一个参数指定一个字符串,则重载决议假定您打算memberName在采用较少参数的重载中显式指定,这不是所需的行为。

有什么方法可以做到这一点(也许使用一些我还没有学过的新属性?)还是我们只是达到了自动魔法编译器支持可以给我们的极限?

0 投票
4 回答
2332 浏览

c# - 如何在 C# 中使用 params 关键字和调用者信息?

我正在尝试将 C# 5.0 调用方信息与 C# params 关键字结合起来。目的是为日志框架创建一个包装器,我们希望记录器像 String.Format 一样格式化文本。在以前的版本中,该方法如下所示:

我们这样称呼它:

现在,我们要捕获调用者信息并记录它。所以签名变成:

这不会编译,因为参数必须是最后一个参数。所以我试试这个:

有没有办法在不提供 sourceMembername 或将 messageArgs 参数显式分配为命名参数的情况下调用它?这样做违背了 params 关键字的目的:

有没有办法做到这一点?似乎传递调用者信息的“hacky”方式排除了使用 params 关键字。如果 C# 编译器认识到调用者成员信息参数根本不是真正的参数,那就太棒了。我认为没有必要明确地传递它们。

我的备份将是跳过 params 关键字,调用者将不得不在最后一个示例中使用长签名。

0 投票
2 回答
449 浏览

c# - Is it possible, to evaluate the event of calling a set property?

Let's say, we have an ordinary C# class with one auto get/set property.

Is there any event, that is raised and that I can evaluate, when the set method of the SomeProperty is called?

Is something like this possible in any way, maybe reflection?:

Pseudo Code, NO REAL CODE:

I know, I could use CallerMember, but then I had to change the auto property.

0 投票
2 回答
6452 浏览

c# - 使用 nameof 运算符而不是 CallerMemberNameAttribute 来通知 .NET 4.5.3 中的属性更改有什么好处吗?

随着 .NET 4.5.3 的出现,WPF 开发人员现在有三种(或更多)方法来通知INotifyPropertyChanged接口属性更改。基本上,我的问题是从 .NET 4.5 开始引入的两种方法中的哪一种是通知属性更改的更有效方法,以及在 WPF 中使用这两种方法是否有任何好处?

背景

对于那些不太熟悉这个主题的人,这里是主要的三种方法。第一个是简单地传递字符串的原始的、更容易出错的方法:

第二种方法是在 .NET 4.5 中引入的;CallerMemberNameAttribute:_

第三种也是最新的方法已(或即将)作为 .NET 4.5.3 的一部分在 C#6.0 中引入;nameof运营商:

我自己的假设是,简单地传递字符串的原始、更容易出错的方法将是最有效的,因为我只能想象其他两种方法使用某种形式的反射。但是,我真的很想知道其他两种方法中哪一种更有效,以及在 WPF 上下文中使用CallerMemberNameAttribute属性和运算符之间是否真的有任何区别。nameof

0 投票
1 回答
158 浏览

c# - 实现与 CompilerServices.CallerMemberAttribute 具有类似行为的属性

可以创建一个行为类似于CallerMemberNameAttribute?

我的意思是,我用谷歌搜索并找到了这篇文章,它说 CallerMemberName 是属于 CompilerServices 组的属性,或者换句话说,这个属性改变了编译器构建我的 IL 的方式。因此,如果不自定义 c# 编译器,就不可能复制这种行为。

但我还不相信。我希望stackoverflow中的某个人可以另说。所以这个问题是给它的。

一些上下文:

我正在寻找这个主要是为了改进这个代码:

我的应用程序中有许多类是字典,并且具有表示特定键的属性。

使用StackTrace(在 C# 4.0 中)和CallerMemberName(在 C# 5.0 中)我能够将我的代码更新为:

现在我的目标是归档一些这样的:

那么有人可以帮助我吗?这是可能的?

0 投票
0 回答
813 浏览

c# - CallerMemberName 不返回 propertyName

我正在处理一些突然停止运行的代码。我将问题追溯到 .NET 4 中的 CallerMemberName 功能

似乎它刚刚停止工作,[CallerMemberName] String propertyName = "" 返回 "",即使它是从属性 "speed" 调用的。它以前工作正常,我检查了该项目的目标是“.NET Framework 4”。知道是什么原因造成的吗?

物业代号:

并在这里处理:

编辑:安装了 Microsoft BCL Portability Pack,它的行为相同,但带有以下警告:

警告 10 'D:\Projects...MainWindow.xaml.cs' 中的类型 'System.Runtime.CompilerServices.CallerMemberNameAttribute' 与 'd:\Projects.. .\packages\Microsoft.Bcl.1.1.10\lib\net40\System.Runtime.dll'。使用“D:\Projects....\MainWindow.xaml.cs”中定义的类型。D:\Projects...AnOtherClass.xaml.cs

0 投票
1 回答
602 浏览

java - Java中的调用者信息

在 C# 中,我们有调用者信息

MSDN 链接:CallerInfo

我想知道 Java 有没有等价的注解?

这些功能可以帮助我们更好地追踪

更新 :

我写了一个类:

并调用 trace() 方法:

结果:

对我来说不是这样,我想要这样的结果:

事实上,我现在想知道类和方法如何调用我的 trace() (父级)

0 投票
1 回答
382 浏览

c# - My property does not update using [CallerMemberName]

Admittedly I am new to wpf. But i have spent some time Googling about it all and I am stumped.

in essence i want to update my TextBlock in my UI using Binding whenever my Model values change.

So this is my Model:

This is my UI:

This is my code behind:

using System.Windows;

When i press the button the text does not change on the UI..?

0 投票
1 回答
2884 浏览

c# - CallerMemberName 不适用于字段上的属性构造函数

我正在使用 C#(.NET 4.5,VS 2013)生成一个序列化程序,并且我正在使用一个属性来控制序列化元数据,例如存储成员以供读取和写入的名称。由于我不想每次都将成员名称作为属性的参数写出,因此我尝试使用 CallerMemberName。

对于属性,它工作正常:在调用构造函数时传递属性名称,并且属性允许我在反序列化中分配属性值。

对于字段,无论出于何种原因,CallerMemberName 都拒绝工作。相反,我每次都得到默认的 string.Empty,即使其他参数参数正确传递也是如此。

我当前的测试代码是:

我已经用不接收参数的字段对其进行了测试,该字段接收参数以确保正在调用构造函数,该字段抛出构造函数异常以双重确保正在调用构造函数,但我不知道找出我做错了什么。

0 投票
1 回答
972 浏览

c++-cli - C++/CLI:如何在 C++/CLI 中使用 CallerMemberNameAttribute?

在 C# 和 VB.Net 中,我可以使用CallerMemberNameAttribute将调用者的名称作为字符串获取:

我想在 C++/CLI 中做同样的事情,但不知何故我无法让它工作。尝试了几种结构,我开始怀疑 C++/CLI 编译器是否支持这个属性。

这是一个(简化的)实现:

在 C# 应用程序中调用此方法时,name 的值为 null。也尝试使用属性DefaultParameterValue但它也没有帮助。现在没有想法了。

显而易见的答案是,为什么不在 C# 中实现呢?好吧,在这种特定情况下,我仅限于 C++/CLI。