none
class內部 property indexof 找不到 RRS feed

  • 問題

  • 請問各位大大~

    Class employee
        Private _salary As Integer
        Private _name As String

    end class

    ------------------------------------------------

    emp(i) = new employee

    讓 user 輸入 多個 emp.name,emp.salary 後

    要怎麼搜尋emp的name呢??????

    dim find as integer = emp.indexof(emp.name)

    直覺想到上面,可是一直有錯。

    2012年9月12日 上午 09:17

解答


  • Console.WriteLine("請輸入你要查詢的資料")
            search = Console.ReadLine()
            Dim find = From em As employee In emp
               Where em.name.Contains(search)
               Select em
            For Each em As employee In find
                em.printdata()
            Next



    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 Cooldinoman 2012年9月13日 上午 07:45
    2012年9月13日 上午 07:11

所有回覆

  • HOW TO:在 Visual Basic 中宣告及呼叫預設屬性


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年9月12日 上午 10:01
    版主
  • 您好,
    您可以使用 Linq to Object

    http://msdn.microsoft.com/en-us/library/bb397937.aspx#Y300

    Linq to Objects - Where search within a list

    Public Class employee Public Salary As Integer Public Name As String End Class Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click Dim emp1 As New employee With {.Salary = 22000, .Name = "EMP1"} Dim emp2 As New employee With {.Salary = 42000, .Name = "EMP2"} Dim arrList As New ArrayList() arrList.Add(emp1) arrList.Add(emp2) ' Use an explicit type for non-generic collections Dim query = From emp As employee In arrList Where emp.Salary > 30000 Select emp For Each emp As employee In query MsgBox("Name:" & emp.Name & ", Salary" & emp.Salary) Next

    Dim queryByName = From emp As employee In arrList
               Where emp.Name.Contains("EMP")
               Select emp
            For Each emp As employee In queryByName
                MsgBox("Name:" & emp.Name & ", Salary" & emp.Salary)
            Next End Sub




    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/




    2012年9月12日 上午 10:02
  • 建立改用Dictionary來存資料, 並以_name當做資料的Key, 請參考:VB.NET Dictionary
    2012年9月13日 上午 03:39
  • 請問各位大大~

    Class employee
        Private _salary As Integer
        Private _name As String

    end class

    ------------------------------------------------

    emp(i) = new employee

    讓 user 輸入 多個 emp.name,emp.salary 後

    要怎麼搜尋emp的name呢??????

    dim find as integer = emp.indexof(emp.name)

    直覺想到上面,可是一直有錯。

    首先你定義的不是屬性,而是變量。建議你:

    Public Class Employee
        Public Property Salary As Integer
        Public Property Name As String
    End Class
    
    '此處你可以:
    Dim e As New Employee With{.Salary=xxx,……}
    
    '或者利用反射
    Dim e As New Employee
    d.GetType.GetProperty("Name").SetValue(e,Your Value,Nothing)

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年9月13日 上午 04:40
  • 還是把全部程式碼PO上來好了

    有試著引用"亂馬克"大大的linq,還是有點問題,目前正在試。

    感謝各位的一一回覆,甘溫阿

    Module Module1 Dim n As Integer Public flag As Integer Dim search As String Sub wrong(ByVal vsalary As Integer) Console.WriteLine("你輸入的薪水為{0},範圍是在20000到40000", vsalary) End Sub Sub Main() Dim name1 As String Dim salary1 As Integer Dim emp As New List(Of employee) n = Console.ReadLine() For i = 0 To n - 1 Do Console.WriteLine("請輸入第{0}位的姓名", i + 1) name1 = Console.ReadLine() Console.WriteLine("請輸入第{0}位的薪水", i + 1) salary1 = Console.ReadLine() emp.Add(New employee()) AddHandler emp(i).showerror, AddressOf wrong emp(i).name = name1 emp(i).salary = salary1 Loop While flag = 1 Next For i = 0 To n - 1 emp(i).printdata() Next Console.WriteLine("請輸入你要查詢的資料") search = Console.ReadLine() Dim find As Integer = emp.IndexOf(emp.name) Console.Read() End Sub End Module Class employee Private _salary As Integer Private _name As String Public Event showerror(ByVal vsalary As Integer) Public Property salary() As Integer Get Return _salary End Get Set(ByVal value As Integer) If value < 20000 Or value > 40000 Then RaiseEvent showerror(value) flag = 1 Else _salary = value flag = 0 End If End Set End Property Public Property name As String Get Return _name End Get Set(ByVal value As String) _name = value End Set End Property Public Sub printdata() Console.WriteLine("{0} {1} {2}", name, vbTab, salary) End Sub End Class




    2012年9月13日 上午 06:01

  • Console.WriteLine("請輸入你要查詢的資料")
            search = Console.ReadLine()
            Dim find = From em As employee In emp
               Where em.name.Contains(search)
               Select em
            For Each em As employee In find
                em.printdata()
            Next



    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 Cooldinoman 2012年9月13日 上午 07:45
    2012年9月13日 上午 07:11
  • 這是其中一種解法

    Public Class Employee
    	Public Property _Salary As Integer
    	Public Property _Name As String
    End Class
    
    
    Public Class Employees
    	Private EmployeeList As New List(Of Employee)
    
    	Default Property Item(ByVal index As Integer) As Employee
    		Get
    			Return EmployeeList(index)
    		End Get
    		Set(value As Employee)
    			EmployeeList(index) = value
    		End Set
    	End Property
    
    
    	Private currentname As String
    	Default Property Item(ByVal name As String) As Employee
    		Get
    			currentname = name
    			Return EmployeeList.Find(AddressOf FindEmployee)
    		End Get
    		Set(value As Employee)
    			currentname = name
    			Dim result As Employee = EmployeeList.Find(AddressOf FindEmployee)
    			result._Salary = value._Salary
    		End Set
    	End Property
    
    
    	Private Function FindEmployee(ByVal value As Employee) As Boolean
    		If value._Name = currentname Then
    			Return True
    		Else
    			Return False
    		End If
    	End Function
    
    	Public Sub add(ByVal employeeName As String, ByVal employeeSalary As Int32)
    		EmployeeList.Add(New Employee() With {._Name = employeeName, ._Salary = employeeSalary})
    
    	End Sub
    
    	Public Sub add(ByVal emp As Employee)
    		EmployeeList.Add(emp)
    	End Sub
    End Class

    Public Class Form1
    
    	Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    		Dim employeesData As New Employees
    		employeesData.add("A", 1200)
    		employeesData.add("B", 600)
    		employeesData.add("C", 800)
    		MessageBox.Show(employeesData("B")._Salary)
    	End Sub
    End Class


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年9月13日 上午 07:13
    版主
  • 真的太感謝 亂馬克 大大,這是我第一次使用論壇,之後我想會更加好好利用。

    P.S.感激所有回答問題的大大!!!!!

    2012年9月13日 上午 07:46