簡體   English   中英

C#如何聲明未知的方法類型

[英]C# How to Declare unknown method types

我必須為最終用戶提供搜索功能,為此我提供了一個下拉菜單和一個文本框,下拉列表中有EmployeeID,DisplayName,City等選項,在選擇下拉值后,他需要在文本框中輸入一個值。

如果用戶選擇EmployeeID,則該值將為Int類型,如果他選擇Name或city,則該值將為string類型。

Public Employee getEmpInfo(object querystring, object queryvalue)
{
// code to get the empplyee info
}

我想知道是否有比使用對象類型更好的方法?

您可以像這樣重載您的方法:

如果您的參數是int:

public Employee getEmpInfo(int employeeId){
   // query by ID
}

或者一個字符串

public Employee getEmpInfo(string employeeName){
    // query by name
}

然后,如果你給字符串,第二個將由程序使用,否則第一個將。 您可以在文件中編寫這些函數。 它被稱為方法重載

參考文獻:

https://www.geeksforgeeks.org/c-sharp-method-overloading/

https://www.tutorialspoint.com/What-is-method-overloading-in-Chash

功能重載


另一方面,如果要使用一個函數來搜索所有類型:

public class SearchParams {
    public int ID;
    public string Name;
    public string City;

    public SearchParams(int ID = null, string Name = null, string City = null)
    { 
         this.ID = ID;
         this.Name = Name;
         this.City = City;    
    }
}


public function getEmpInfo(SearchParams params){
    // build query by that parameters
    if(ID != null){
       // add query by ID
    }
}

可以通過為所有屬性添加和綁定控件並根據組合框中選定的屬性名稱在UI中解決此問題,僅顯示所選屬性的控件。

這種方法可以對某些屬性進行非常具體的控制,而不是將所有內容強制為字符串輸入。

如何做到這一點取決於UI技術(Web,WinForms,WPF,...)

在我看來,你的方法是錯誤的。

如果按名稱或ID或出生日期搜索Employee,則執行完全不同的操作和SQL操作。

您應該為每種可能性設置一個版本的方法,以便在每個方法中執行一組特定的操作。

如果基於覆蓋中的參數類型創建單個方法,則當具有相同類型的不同列時,可能會遇到麻煩。


這是錯誤的(甚至無法編譯):

public Employee GetEmployee(int id)
{
    //Instructions..
}

public Employee GetEmployee(string name)
{
    //Instructions..
}

public Employee GetEmployee(string city)
{
    //Instructions..
}

這將支持所有可能性並保持可讀性:

public Employee GetEmployeeByID(int id)
{
    //Instructions..
}

public Employee GetEmployeeByName(string name)
{
    //Instructions..
}

public Employee GetEmployeeByCity(string city)
{
    //Instructions..
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM