亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何以編程方式更改我調用的函數名稱

如何以編程方式更改我調用的函數名稱

C#
一只萌萌小番薯 2023-08-20 14:38:53
我試圖根據組合框的信息調用函數。用戶將更改組合框,在此過程中,我們根據與固定文本連接的組合框文本中的數據調用函數。我正在嘗試這樣做,因此每次獲得新版本時,我只需添加一個文件夾,而不必像在 case 語句中那樣進入代碼添加新函數名稱。組合框的文本為v6.1v6.4 v7.2v8.6等等我想要調用的函數名為 Getinfo_,并添加了組合框中的文本,擴展名為 . 替換為 _ 例如,我會從組合框中選擇 v6.1,這樣做時我會調用名為 Getinfo_v6_1 的函數經過大量的思考、搜索和嘗試,我已經接近但還不夠接近。我想我需要使用反射(也許不需要)并且private void cmbobx_version_SelectedIndexChanged(object sender, EventArgs e){    Type t = this.GetType(); //need to get the type    MethodInfo method = t.GetMethod("Getinfo" + cmbobx_version.Text.Replace('.', '_'));   //put together function name     method.Invoke(this, new object[] {Fridge, "Order" }); //call function with parameters}不幸的是,這在調用時停止,說該方法為 NULL,我不明白為什么會這樣,除了也許我完全誤解了我在做什么。我想調用的函數看起來有點像下面的public void Getinfo_v6_1(ComboBox inFocusComboBox, string action){  switch (inFocusComboBox.Text)        {           case "Red": Price = 11254; break;           case "Blue": Price = 11278; break;           case "Green": Price = 11354; break;         }}public void Getinfo_v6_4(ComboBox inFocusComboBox, string action){   switch (inFocusComboBox.Text)        {            case "Red": Price = 254; break;            case "Blue": Price = 278; break;            case "Green": Price = 354; break;          }}即使您有更好的方法來做我需要做的事情,我們也非常感謝您的所有幫助。
查看完整描述

2 回答

?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

您應該閱讀有關設計模式的信息,例如您可以使用模板設計模式創建實現您的功能的多態項。盡量避免反射,因為它很“慢”并且類型不安全。



查看完整回答
反對 回復 2023-08-20
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

我確實錯過了下劃線,在使用它時我沒有注意到,因為我還進行了文本替換。并認為這一切都是正確的。即使在調試時我沒有看到它,通常我們也看不到明顯的東西,這就是為什么那些比我聰明的人的第二意見總是好的。


現在的工作代碼如下。


private void cmbobx_version_SelectedIndexChanged(object sender, EventArgs e)

{

    Type t = this.GetType(); //need to get the type

    MethodInfo method = t.GetMethod("Getinfo_" + cmbobx_version.Text.Replace('.', '_'));   //put together function name

     method.Invoke(this, new object[] {Fridge, "Order" }); //call function with parameters

}

請務必小心,因為這些函數將沒有引用,但它會編譯并運行。當您調用正確的函數時,這一切都會在運行時起作用。


查看完整回答
反對 回復 2023-08-20
  • 2 回答
  • 0 關注
  • 141 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號