2016-12-06 59 views
0

如何訪問C#中的類的成員,就像我認爲我可以在C++中執行的那樣?如何訪問C#中的類的成員,就像我認爲我可以在C++中做的那樣?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 

    namespace DateAndMoney 
    { 
     class InputNode 
     { 
      DateTime dateTime; 
      string dollarAmount; 
     } 
     class Program 
     { 
      public static void ReadFile(string filename) 
      { 
       InputNode inputNode = new InputNode(); 
       if (System.IO.File.Exists(filename)) 
       { 
        var reader = new StreamReader(File.OpenRead(filename)); 

        while (!reader.EndOfStream) 
        { 
         var input = reader.ReadLine(); 
         var values = input.Split(','); 
         inputNode.dateTime = values[0]; 
         inputNode.dollarAmount = values[1]; 

        } 
       } 
      } 

      static void Main(string[] args) 
      { 
       string filename; 
       Console.WriteLine("enter path and file name of input file"); 
       filename = Console.ReadLine(); 
       ReadFile(filename); 
      } 
     } 
    } 

預編譯器不喜歡:

  inputNode.dateTime = values[0]; 
      inputNode.dollarAmount = values[1]; 

而且這種變化沒有改變任何

struct InputNode 
{ 
    DateTime dateTime; 
    string dollarAmount; 
} 
+2

你需要讓他們公開,如果你想看到它們的類 – BugFinder

+1

外面你把之前你值從你的'values'列表中,你必須將它們轉換或解析爲正確的類型 – RandomStranger

回答

0

您可以創建公共方法,它返回一個特定成員的值(推薦)或使會員自己公開。 您可以使用引用(https://msdn.microsoft.com/en-us/library/st6sy9xe.aspx

class InputNode 
{ 
    private DateTime dateTime; 
    private string dollarAmount; 

    public DateTime GetDate() 
    { 
     return dateTime; 
    } 
} 
0

如果更改

class InputNode 
{ 
    DateTime dateTime; 
    string dollarAmount; 
} 

class InputNode 
{ 
    public DateTime dateTime; 
    public string dollarAmount; 
} 

然後,您可以訪問他們爲你正在嘗試,但你需要將文本轉換爲日期以將其放入日期時間。

0

默認情況下,C#字段是私人的,所以你不能訪問它。最好使用Properties來設置和獲取值

你的情況:

class InputNode 
    { 
     public DateTime DateTime{get;set;} 
     public string DollarAmount{get;set} 
    } 
0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 

namespace DateAndMoney 
{ 
    public class InputNode 
    { 
     public DateTime dateTime; 
     public string dollarAmount; 
    } 
    public class Program 
    { 
     public static void ReadFile(string filename) 
     { 
      InputNode inputNode = new InputNode(); 
      if (System.IO.File.Exists(filename)) 
      { 
       var reader = new StreamReader(File.OpenRead(filename)); 

       while (!reader.EndOfStream) 
       { 
        var input = reader.ReadLine(); 
        var values = input.Split(','); 
        try 
        { 
         inputNode.dateTime = Convert.ToDateTime(values[0]); 
         inputNode.dollarAmount = Convert.ToDouble(values[1]); 
        } 
        catch(Exception e) 
        {} 
       } 
      } 
     } 

     public static void Main(string[] args) 
     { 
      string filename; 
      Console.WriteLine("enter path and file name of input file"); 
      filename = Console.ReadLine(); 
      ReadFile(filename); 
     } 
    } 
} 
+0

,但我更喜歡使用public DateTime dateTime {get;組; } – jace

0

這做到了。

class InputNode 
    { 
     public DateTime dateTime; 
     public string dollarAmount; 
    } 
    class Program 
    { 
     public static void ReadFile(string filename) 
     { 
      InputNode inputNode = new InputNode(); 
      if (System.IO.File.Exists(filename)) 
      { 
       var reader = new StreamReader(File.OpenRead(filename)); 

       while (!reader.EndOfStream) 
       { 
        var input = reader.ReadLine(); 
        var values = input.Split(','); 
        inputNode.dateTime = Convert.ToDateTime(values[0]); 
        inputNode.dollarAmount = values[1]; 

       } 
      } 
     } 
+0

轉換爲日期時間時,考慮在轉換中使用格式以實現可讀性,如下所示:DateTime.ParseExact(values [0],「yyyy-MM-dd」,CultureInfo.CurrentCulture) – martijn

0

首先(正如其他人所說的),您需要使字段對應用程序的其餘部分「可見」。

class InputNode 
{ 
    // DateTime dateTime; 
    internal DateTime dateTime; 
    public string dollarAmount; 
    // string dollarAmount; 
} 

你可以閱讀更多關於access modifiers here

第二件事是,你要指定stringDateTime類型字段。在C#中你有轉換器一堆可以從一個類型轉換成另一種,你也可以通過創建自己的轉換器this example

相關問題