gpt4 book ai didi

c# - 是否有可能获得例如代码中的位置成员(member)信息?

转载 作者:行者123 更新时间:2023-12-05 01:23:20 32 4
gpt4 key购买 nike

问题

有没有办法获取代码中使用属性的位置,或声明成员变量的位置?

我不是在寻找解决此问题的方法,只是寻求一个简单的答案,无论这在技术上是否可行。

一些背景信息

我已经定义了一个属性,该属性使用提供给属性的参数将成员连接到 Unity UI 文档中的 VisualElement。这是一个例子:

[Query("button-upvote")]
private Button _buttonUpvote;

现在在某些情况下该元素不存在,这意味着 _buttonUpvote 无法解析,可能是因为有错字,在这种情况下我想向 Unity 控制台记录警告。在这个警告中,我得到了一个堆栈跟踪,但我没有得到一个堆栈跟踪,它引导我到上面示例中的属性或有问题的成员,它引导我到记录警告的代码,这是完全不相关的在这种情况下的实际错误。我想在警告日志中包含使用 Query 属性的位置。

最佳答案

不确定在 Unity 中是否可行,但在最新的 .NET 编译器中您可以使用 CallerFilePathAttributeCallerLineNumberAttribute :

public class MyAttribute : Attribute
{
public string Path { get; }
public int Line { get; }

public MyAttribute(string someVal, [CallerFilePath] string path = "",[CallerLineNumber] int line = 0)
{
Path = path;
Line = line;
}
}

class MyClass
{
[My("test")]
public int Test { get; set; }
}

var myAttribute = typeof(MyClass).GetProperty(nameof(MyClass.Test)).GetAttribute<MyAttribute>();
Console.WriteLine($"{myAttribute?.SomeVal} - {myAttribute?.Path} - {myAttribute?.Line}"); // prints something like: test - D:\Projects\TestApp\SoAnswers.NET6\CallerLineAttibuteTests.cs - 19

关于c# - 是否有可能获得例如代码中的位置成员(member)信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72544566/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com