2014-02-15 26 views
1

我正在使用非靜態類,並希望將方法的答案顯示在控制檯窗口中。如何在C#中使用非靜態方法顯示返回值

當我將方法更改爲靜態並從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=true

Why can't you call a non-static method from a static method?

根據這篇文章,我需要創建一個使用「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; 
    } 
+1

'GetSingleAsset'是一種方法,而不是一個類。 'Foo'應該是包含'GetSingleAsset'的類的類型,你應該寫出'Foo.GetSingleAsset()'而不是'Foo'。 –

回答

1

的「方法來控制檯窗口的答案」 - 在這種情況下,是一個對象 - 如果你試圖Console.WriteLine()一個對象,你只會看到寫到控制檯的對象類型 - 而不是它的值。如果你希望看到的是Patrick,那麼它就是正確的了。()通過控制檯輸出)返回來自哪個方法 - 如果它不是一個對象。

但是,由於'資產'本身就是一個對象,所以如果你只是做了一個Console.WriteLine(資產)它就會告訴你資產的類型偏離了..而不是它的值。例如,將打印「System.Collection.Asset」,而不是您感興趣的值。

您將需要在類實例化的代碼中放置一個斷點並查看Locals窗口以查看看到「資產」類型包含的值,並精確打印出您感興趣的值......機會就是您實際感興趣的值包含在Asset類中的另一個對象內......也許for循環是按順序排列的這裏。

4

你需要這樣做:

NameOfYourClass instanceOfClass = new NameOfYourClass(); 
Console.WriteLine(instanceOfClass.NameOfMethod()); 
相關問題