在c#中获取具有自定义属性的所有方法永远找不到方法
Getting all methods with custom attribute in c# never finds a method
所以我创建了这个函数来获取所有具有自定义属性的方法ExecuteFromConsole
[ExecuteFromConsole("test", "help")]
static void Test(string[] args)
{
Debug.Log("Test Ran");
}
public void AddAttributeCommands()
{
//get all methods with the execute attribute
var methods = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(x => x.GetTypes())
.Where(x => x.IsClass)
.SelectMany(x => x.GetMethods())
.Where(x => x.GetCustomAttributes(typeof(ExecuteFromConsoleAttribute), false).FirstOrDefault() != null);
//adds them to commands
foreach (var method in methods)
{
Debug.Log("Found attribute");
ExecuteFromConsoleAttribute attribute = (ExecuteFromConsoleAttribute)method.GetCustomAttributes(typeof(ExecuteFromConsoleAttribute), false).First();
if(!method.IsStatic)
{
Debug.LogError("ExecuteFromConsoleAttribute must be used on static functions only");
continue;
}
CommandFunc func = (CommandFunc)Delegate.CreateDelegate(typeof(CommandFunc), method);
AddCommand(attribute.command, func, attribute.help);
}
}
当我最初测试它时它工作得很好但现在它永远不会进入 foreach 循环并且 Debug.log("found attribute")
意味着它没有找到明显位于其上方的具有属性的方法。
AFAIK 我没有修改任何应该影响它的东西。
有没有人知道为什么它不起作用,或者如果我做错了,我应该有更好的方法来代替?
如果有任何影响,项目是统一的
GetMethods
的默认值是 "anything public",但您的方法是非方法。尝试将 BindingFlags.NonPublic | BindingFlags.Static
添加到 GetMethods
调用中,以提供更多提示。
所以我创建了这个函数来获取所有具有自定义属性的方法ExecuteFromConsole
[ExecuteFromConsole("test", "help")]
static void Test(string[] args)
{
Debug.Log("Test Ran");
}
public void AddAttributeCommands()
{
//get all methods with the execute attribute
var methods = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(x => x.GetTypes())
.Where(x => x.IsClass)
.SelectMany(x => x.GetMethods())
.Where(x => x.GetCustomAttributes(typeof(ExecuteFromConsoleAttribute), false).FirstOrDefault() != null);
//adds them to commands
foreach (var method in methods)
{
Debug.Log("Found attribute");
ExecuteFromConsoleAttribute attribute = (ExecuteFromConsoleAttribute)method.GetCustomAttributes(typeof(ExecuteFromConsoleAttribute), false).First();
if(!method.IsStatic)
{
Debug.LogError("ExecuteFromConsoleAttribute must be used on static functions only");
continue;
}
CommandFunc func = (CommandFunc)Delegate.CreateDelegate(typeof(CommandFunc), method);
AddCommand(attribute.command, func, attribute.help);
}
}
当我最初测试它时它工作得很好但现在它永远不会进入 foreach 循环并且 Debug.log("found attribute")
意味着它没有找到明显位于其上方的具有属性的方法。
AFAIK 我没有修改任何应该影响它的东西。
有没有人知道为什么它不起作用,或者如果我做错了,我应该有更好的方法来代替?
如果有任何影响,项目是统一的
GetMethods
的默认值是 "anything public",但您的方法是非方法。尝试将 BindingFlags.NonPublic | BindingFlags.Static
添加到 GetMethods
调用中,以提供更多提示。