如何将类统一传递给方法?

时间:2019-06-16 07:52:14

标签: c# unity3d

我有一些这样的C#类:

public class Result_Splash
{
    public string id;
    public string version_code;
    public string version_number;
}

public class Link_Splash
{
    public int id;
    public int app_version_id;
    public string link;
    public int provider_type;
    public int order_download;
    public int status;
}

以及类似的方法:

public void SomeClassDebug(???)
{
    Debug.Log(???);
}

因此,我需要将类传递给我的方法并调试它们的字段。 有可能吗?

3 个答案:

答案 0 :(得分:2)

Debug.Log();

stringobject(c#中所有内容的基类)用作参数。如果您传入object,则Debug.Log内部将使用该string的{​​{1}}方法将其自动转换为ToString

问题是这里应该记录什么?

当然,您可以在object内定义“临时”,例如

Debug.Log

所以您将看到public void SomeClassDebug(Result_Splash result) { Debug.Log(result.id); } 的结果作为日志。

在我看来,更好的方法是在您的类中实现/重写result.id.ToString(),以便自定义将根据您的需要生成的输出。 (我很懒,所以我将在小班教学中展示-另一个是您的作业)

ToString

我使用了$ string interpolation,这基本上是一种更好的书写方式,例如

public class Result_Splash
{
    public string id;
    public string version_code;
    public string version_number;

    public override string ToString()
    {
        // For example print the values as requested
        return $"id: {id}, version_code: {version_code}, version_number: {version_number}";
    }
}

但是您可以使用任何您想返回的值。

现在您可以轻松完成

return base.ToString() + " id: " + id + ", version_code: " + version_code + ", version_number: " + version_number;

当您调用它时,然后传入该类型的实例

public void SomeClassDebug(Result_Splash result)
{
    Debug.Log(result);
}

这应该生成一个日志

  

id:您好,version_code =,version_number =世界!

答案 1 :(得分:0)

有几种选择。 例如,您可以在类中包含Debug方法,并使用Unity JSON序列化器(或NewtonSoft等)自动将所有字段名称和数据转换为JSON格式的文本:

public class BaseLoggableClass
{    
    public void Debug()
    {
        Debug.Log(ChosenJsonSerializer.Serialize(this));
    }

}

public class Result_Splash : BaseLoggableClass
{
//... your fields here
}

// example of usage
var t = Result_Splash();
... some code ...
t.Debug();

您也可以使用 NLOG记录器,设置 JSON布局,并使用文件或任何目标来记录数据。

答案 2 :(得分:0)

这是将对象(或两个)传递给方法的方式。这是C#或任何面向对象的编程语言的绝对基础,因此,如果您不理解这一点,建议您先尝试学习这些基础。

public void SomeMethod() {
    Link_Splash linkSplash = new Link_Splash {
        id = "123",
    };

    Result_Splash resultSplash = new Result_Splash {
        id = "456",
    }

    SomeClassDebug(resultSplash, linkSplash);
}

public void SomeClassDebug(Result_Splash result, Link_Splash link)
{
    Debug.Log(result.id); // => 456
}