【发布时间】:2022-01-04 16:11:36
【问题描述】:
我有两个这样的课程:
public class test1: BaseClass
{
public test1() : base()
{
}
...
public class BaseClass
{
public BaseClass(
[CallerMemberName]string membername ="",
[CallerFilePath] string path = "")
{
var sf = new System.Diagnostics.StackTrace(1).GetFrame(0);
}
如果我在调用 base 时指定 test1 ctor - 我会正确初始化 membername 和 path,但如果没有 - 编译器会生成默认构造函数调用,并且 membername 和 path 都是空的。
这是错误还是功能?
(Visual Studio 2019 16.11.8,net core 3.1 或 net 5.0)。
【问题讨论】:
-
文档没有明确说明这是否是所需的行为。当然,参数可以通过两种方式进行,因为调用不是显式的(请注意,“错误”的信息永远不是参数,因为这始终是可能的,因为您可以自己合法地将参数值指定为您想要的任何值)。快速搜索在GH 中也没有发现适用的问题,尽管
CallerMemberName在该回购之前,所以我也不希望出现这样的问题。我认为从马口中得到官方消息的新人不会出错。 -
我猜这是意料之中的,因为编译器生成的默认构造函数调用将显式传递您在可选参数中指定的值(即空字符串)
标签: c# callermembername