繁体   English   中英

如何在C#中显示非静态方法的返回值

[英]How to display the return value from a non static method in C#

我正在使用一个非静态类,并且想要在控制台窗口中显示方法的答案。

当我将方法更改为static并从Main()调用时,出现错误,指出“对象引用未设置为对象的实例”。

http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k(EHNullReference);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5);k(DevLang-csharp)&rd =真

为什么不能从静态方法调用非静态方法?

根据本文,我需要使用“ new”关键字创建对象的实例。 我的理解是,您必须为类而不是方法创建对象。

http://msdn.microsoft.com/en-us/library/ms173110.aspx

因此,我创建了一个新对象,但它不返回结果。

    GetSingleAsset Foo = new GetSingleAsset();
    Console.WriteLine(Foo);

输出仅给出方法的名称。

如何查看此非静态方法的返回值?

public Asset GetSingleAsset()
    {
        var memberId = Oid.FromToken("Member:20", _context.MetaModel);
        var query = new Query(memberId);
        var nameAttribute = _context.MetaModel.GetAttributeDefinition("Member.Name");
        var emailAttribute = _context.MetaModel.GetAttributeDefinition("Member.Email");

        query.Selection.Add(nameAttribute);
        query.Selection.Add(emailAttribute);

        var result = _context.Services.Retrieve(query);
        var member = result.Assets[0];

        LogResult(member.Oid.Token,
            GetValue(member.GetAttribute(nameAttribute).Value),
            GetValue(member.GetAttribute(emailAttribute).Value));

        return member;
    }

您需要这样做:

NameOfYourClass instanceOfClass = new NameOfYourClass();
Console.WriteLine(instanceOfClass.NameOfMethod());

“方法到控制台窗口的答案”(在这种情况下是一个对象),并且如果您尝试将Console.WriteLine()作为一个对象,则只会看到写到控制台的对象类型,而不是其值。

是的,Robert是正确的-GetSingleAsset()是一个方法,而不是一个类-因为它返回的值为'Asset'类型的值-类的构造函数将没有返回值-如果您想查看Patrick的信息,则是正确的(通过控制台输出)该特定方法的返回结果是什么-如果它不是对象。

但是,由于“资产”本身就是对象,因此,如果您仅做一个Console.WriteLine(Asset),它将显示资产的类型偏离..而不是其值。 例如,将打印“ System.Collection.Asset”,而不打印您感兴趣的值。

您将需要在类实例化时在代码中放置一个断点,并通过Locals Window查看“ Asset”类型所包含的值,并准确打印出您感兴趣的值...可能是什么值您实际上感兴趣的是包含在Asset类内的另一个对象中..也许这里有一个for循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM