C# 正在使用c获取调用函数的对象#

C# 正在使用c获取调用函数的对象#,c#,unity3d,system.reflection,C#,Unity3d,System.reflection,是否有可能获得对调用静态方法的对象的正确引用 我在Unity项目中的许多地方调用了一个静态方法,我想将一个gameObject传递给UnityEngine.Debug.Log(对象消息,对象上下文)中的上下文,以便使用Unity控制台进行调试。我已经尝试了System.Diagnostics.StackTrace类,但只找到了不有用的字符串 编辑: 下面是一个类似于我需要实现的代码: public static class DebuggingHelper { public static

是否有可能获得对调用静态方法的对象的正确引用

我在Unity项目中的许多地方调用了一个静态方法,我想将一个
gameObject
传递给
UnityEngine.Debug.Log(对象消息,对象上下文)
中的上下文,以便使用Unity控制台进行调试。我已经尝试了
System.Diagnostics.StackTrace
类,但只找到了不有用的字符串

编辑: 下面是一个类似于我需要实现的代码:

public static class DebuggingHelper {
    public static void LogText() {
        var callingObject = SomeStaticReflectionClasss.INeedToGetItSomehowHere();
        if(callingObject is UnityEngine.Object)
            UnityEngine.Debug.Log("Good morning", callingObject as UnityEngine.Object)
    }
}

您可以在组件上使用扩展方法:

public static class ComponentX
{
    public static void Log(this Component component, string msg)
    {
        Debug.Log(msg + " called from: " + component);
    }
}
从组件脚本调用它:

public class Game : MonoBehaviour
{
    void Start()
    {
        this.Log("Hello");
    }
}
结果:


从以下位置调用Hello:Game(Game)

可能出现类似于
Assembly.GetCallingAssembly()的情况:会有帮助,但如果没有更多细节,很难确定。如果调用方数量可控(几十个?),那么最简单的方法可能是暂时更改签名,然后处理传递游戏对象的所有编译错误,而不是试图从调用堆栈中找出它。这里有几个老问题说这是不可能的(例如):你只能得到类名,我猜这就是你得到的。不过,从那以后情况可能发生了变化。我对问题进行了编辑,以更好地说明问题。a是继承的一切,例如,
monobhavior
(继承自
组件)或。如果你的类不是这些类型,而是一个简单的自定义类,你就不能使用它。这个主意很酷,但在这里你知道调用方,因为你用函数参数传递它。我更愿意创建一个反射工具来获取调用者而不显式地传递它。我现在意识到这可能是不可能的…@salveiro它是隐式传递的,注意调用
this.Log(“Hello”)是的,但是扩展方法只是语法糖。我需要一个通用的反射解决方案,它将调用方的对象放入被调用的方法中。无论如何,这听起来像是一个严重的欺骗,所以我想我会放弃这个问题。