2014-03-31 96 views
-1

如何將它轉換爲VB.Net?我真的不確定Structs如何在那裏工作,我找不到合適的人。 請問你們中的任何一位,請告訴我它是如何完成的?Vb.net用c#填充循環結構#

struct Questions 
{ 
    public int temakor; 
    public int nKerdes; 
    public string kerdes; 
    public string kerdes_a; 
    public string kerdes_b; 
    public string kerdes_c; 
    public string kerdes_d; 
    public char valasz; 
} 

則主()

List<Questions> test_questions = new List<Questions>(); 
    using (StreamReader sr = new StreamReader(@"teszt_.txt")) 
    { 
     for (int i = 0; i < 130; i++) 
     { 
      string s = sr.ReadLine(); 
      string[] fields = s.Split('_'); // adatok feldarabolása 
      Kerdesek uj_kerdes; 
      uj_kerdes.temakor = int.Parse(fields[0]); 
      uj_kerdes.nKerdes = int.Parse(fields[1]); 
      uj_kerdes.kerdes = fields[2]; 
      uj_kerdes.kerdes_a = fields[3]; 
      uj_kerdes.kerdes_b = fields[4]; 
      uj_kerdes.kerdes_c = fields[5]; 
      uj_kerdes.kerdes_d = fields[6]; 
      uj_kerdes.valasz = char.Parse(fields[7]); 
      test_questions.Add(uj_kerdes); 
     } 
    } 

    Console.WriteLine("Kedves vizsgázó, jó tanulást a következő vizsgára"); 
+2

(插入關於使用強制性警告'struct'錯誤,以及如何有一個超大的'struct'是有害的,怎麼有一個可變的'struct'是有害的,並具有'public'領域是如何有害,是你*當然*你不是故意寫一個帶有屬性的'class'?) –

+0

也是'Kerdesek'還有'Questions'? –

+0

重新VB翻譯:你試過了什麼?你需要知道的唯一不平凡的事情就是VB關鍵字'Structure' - 其餘的......與你期望的*在VB中完全相同 - 並且實際上與C#相同,這件事。 –

回答

3

那麼,根據反射鏡,C#

Questions q = new Questions { 
    temakor = 1, 
    nKerdes = 2, 
    kerdes = "", 
    kerdes_a = "a", 
    kerdes_b = "b", 
    kerdes_c = "c", 
    kerdes_d = "d", 
    valasz = 'v' 
}; 

轉換爲:

Dim q As New Questions With { _ 
    .temakor = 1, _ 
    .nKerdes = 2, _ 
    .kerdes = "", _ 
    .kerdes_a = "a", _ 
    .kerdes_b = "b", _ 
    .kerdes_c = "c", _ 
    .kerdes_d = "d", _ 
    .valasz = "v"c _ 
} 

從那裏,它應該是相當簡單。但是:這幾乎肯定是不適當的使用struct,它會積極傷害你。我強烈建議:

class Question 
{ 
    public int Temakor {get;set;} 
    public int KerdesInt32 {get;set;} // probably needs a better name 
    public string Kerdes {get;set;} 
    public string KerdesA {get;set;} 
    public string KerdesB {get;set;} 
    public string KerdesC {get;set;} 
    public string KerdesD {get;set;} 
    public char Valasz {get;set;} 
} 

或者作爲一個絕對的最壞的情況下(這是可怕的,需要理由):

struct Question 
{ 
    public readonly int Temakor; 
    public readonly int KerdesInt32; 
    public readonly string Kerdes, KerdesA, KerdesB, KerdesC, KerdesD 
    public readonly char Valasz; 
    public Question(int temakor, int kerdesInt32, ..., char valasz) 
    { 
     Temakor = temakor; 
     KerdesInt32 = kerdesInt32; 
     // ... 
     Valasz = valasz; 
    } 
} 
0

Kerdesek也是問題。當我寫這個話題的時候我很匆忙,所以我只翻譯了其中最重要的部分,使其更容易理解。不管怎麼說,我想要做的是用這些變量創建一個結構體,導入一個txt文件並填充這些變量。但是!我不只是想使用這個結構體,而是更像是:10次左右。

  • Temakor持有主題的數
  • nKerdes持有
  • kerdes認爲這個問題本身
  • kerdes_a持有回答問題的數量 「一」 的問題
  • kerdes_b ...
  • kerdes_c ...
  • kerdes_d ...
  • valasz有答案。

所以當我使用streamreader來讀取我的txt文件時,它的行保存着這些變量的數據,當一個問題被讀入時,我讀了另一個,直到我讀完整個txt文件。 我爲此使用結構的原因是C#非常簡單,我想這是最簡單的方法(使用LINQ)。

+0

一個結構不過是將它的公共和私人領域與管道膠帶綁定在一起。將結構傳遞給'Add'方法會將其所有字段的內容傳遞給該方法; 'Add'方法收到的任何內容都與從其中複製數據的結構實例有關,因此在'test_questions.Add()'後對結構所做的更改不會影響剛剛添加到列表中的數據。 – supercat

0

我弄明白了,這不是什麼大不了的事情。

Imports System 
Imports System.IO 
Imports System.Text 

Public Class Form1 
Public Structure Kerdesek 
    Public hanyadik As Integer 
    Public kerdes As String 
    Public valaszA As String 
    Public valaszB As String 
    Public valaszC As String 
    Public valaszD As String 
    Public helyesValasz As Char 
End Structure 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
End Sub 

Private Sub BetöltésToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BetöltésToolStripMenuItem.Click 
    OpenFile.ShowDialog() 

End Sub 

Private Sub OpenFile_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles OpenFile.FileOk 
    Dim sr As StreamReader = New StreamReader(OpenFile.OpenFile()) 
    Dim firstLine As Boolean = True 
    Dim row As Integer 
    Dim lst As New List(Of Kerdesek) 

    While Not (sr.EndOfStream) 
     If (firstLine = True) Then 
      row = sr.ReadLine() 
      firstLine = False 
     ElseIf (firstLine = False) Then 
      For i = 1 To row 
       Dim ujKerdes As New Kerdesek 
       ujKerdes.hanyadik = sr.ReadLine() 
       ujKerdes.kerdes = sr.ReadLine() 
       ujKerdes.valaszA = sr.ReadLine() 
       ujKerdes.valaszB = sr.ReadLine() 
       ujKerdes.valaszC = sr.ReadLine() 
       ujKerdes.valaszD = sr.ReadLine() 
       ujKerdes.helyesValasz = sr.ReadLine() 
       lst.Add(ujKerdes) 
      Next i 
     End If 
    End While 
    sr.Close() 


    For Each item As Kerdesek In lst 
     LabelHanyadikKerdes.Text = item.hanyadik 
     LabelKerdes.Text = item.kerdes 
     LabelA.Text = item.valaszA 
     LabelB.Text = item.valaszB 
     LabelC.Text = item.valaszC 
     LabelD.Text = item.valaszD 
     MessageBox.Show(item.hanyadik) 
     MessageBox.Show(item.kerdes) 
    Next 
End Sub 
End Class