gpt4 book ai didi

c# - 在静态方法中获取非静态方法名称

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:10 25 4
gpt4 key购买 nike

我正在尝试做一些相当简单的事情,但不确定是否有任何方法可以简单地创建我的类的虚拟实例。

我正在尝试使用一些简单的代码简单地获取非静态方法的方法名称:

static string GetMethodName(Func<string, int> function  )
{
return function.Method.Name;
}

但是我试图像这样从 MyStaticMethod 调用它,当然它在提示:

private static void MyStaticMethod()
{
var a = GetMethodName(MyNonStaticMethod);
}


private int MyNonStaticMethod(string param1)
{
return 0;
}

有没有办法在不创建包含类的虚拟实例的情况下完成此操作?显然我的情况更复杂,我不能简单地将我的非静态方法设为静态(它需要一个实例并具有依赖项绑定(bind))。只是想知道这是否可行,因为我只需要名称(所以真的不需要实例)。我试图摆脱魔术字符串,并希望在事情发生变化时出现一些编译时错误。

编辑:我创建了一个静态助手类

我有一个通用方法:

    public static string GetMemberName<T>(
Expression<Func<T, object>> expression)
{
if (expression == null)
{
throw new ArgumentNullException("expression");
}

return _GetMemberName(expression.Body);
}

private static string _GetMemberName(
Expression expression)
{
if (expression is MemberExpression)
{
var memberExpression =
(MemberExpression)expression;
return memberExpression.Member.Name;
}

if (expression is MethodCallExpression)
{
var methodCallExpression = (MethodCallExpression)expression;
return methodCallExpression.Method.Name;
}

if (expression is UnaryExpression)
{
var unaryExpression = (UnaryExpression)expression;
return GetMemberName(unaryExpression);
}

throw new ArgumentException("Unrecognized expression");
}

最佳答案

当然可以。使用 Expression<Func<YourInstanceClass, TReturn>>像这样:

static string GetMethodName<TReturn>(Expression<Func<YourInstanceClass, TReturn>> function)
{
var call = function.Body as MethodCallExpression;
return call != null ? call.Method.Name : "not a single call expression";
}

现在你可以

var name = GetMethodName(a => a.MyNonStaticMethod("1"));

Console.WriteLine (name); //prints MyNonStaticMethod

在哪里

public class YourInstanceClass
{
public int MyNonStaticMethod(string param1)
{
return 0;
}
}

我做了 MyNonStaticMethod public,这样我可以在外面调用它,但你可以将它保留为私有(private),并在类中的静态方法中调用它

关于c# - 在静态方法中获取非静态方法名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15774643/

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