Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#选择和指定多个对象中的一个?_C# - Fatal编程技术网

如何使用C#选择和指定多个对象中的一个?

如何使用C#选择和指定多个对象中的一个?,c#,C#,我有以下代码: void openPicker(object sender, EventArgs e) { if (sender != null) { var a = sender; Picker pkr = sender == ati ? atiPicker : ptiPicker; pkr.Focus(); } } 代码运行良好,但我需要能够将pkr分配给以

我有以下代码:

   void openPicker(object sender, EventArgs e) {
        if (sender != null)
        {
            var a = sender;
            Picker pkr = sender == ati ? atiPicker : ptiPicker;
            pkr.Focus();
        }
    }
代码运行良好,但我需要能够将pkr分配给以下各项之一:

atiPicker, ptiPiker, noaPicker prtPicker cfsPicker coPicker 
基于发送方是其中一个

ati, pti, not, prt, cfs or co

我想我可以用很多if语句来实现这一点,但有没有更好的方法来实现这一点?

如评论中所述,您可以使用
词典

但是,每次查询映射中给定键的值时,都会返回附加到任何发件人类型的该类型的新实例

void openPicker(object sender, EventArgs e) {
     if (sender != null)
     {
         var a = sender;
         Picker pkr = sender == ati ? atiPicker : ptiPicker;
         pkr.Focus();
     }
}
可更改为:

Dictionary<object, Picker> bob = new Dictionary<object, Picker>() { { ati, atiPicker}, { pti, ptiPicker }};

void openPicker(object sender, EventArgs e) {
     if (sender != null)          
     {
         var a = sender;
         Picker pkr = bob[sender];
         pkr.Focus();
     }
}
Dictionary bob=newdictionary(){{ati,atiPicker},{pti,ptiPicker};
void openPicker(对象发送器、事件参数){
if(发送方!=null)
{
var a=发送方;
选择器pkr=bob[sender];
pkr.Focus();
}
}
字典
允许您将
if
语句编码为一个switch语句。

试试switch语句

Picker pkr = new Picker();

switch(sender){
    case ati:
        pkr = atiPicker;
        break;
    case pti:
        pkr = ptiPicker;
        break;
    case noa:
        pkr = noaPicker;
        break;
    case prt:
        pkr = prtPicker;
        break;
    case cfs:
        pkr = cfsPicker;
        break;
    case co:
        pkr = coPicker;
        break;
}

pkr.Focus();

使用
字典
。使用
字典
并打开
ati、pti、not、prt、cfs或co
(在@mjwills上展开)可以显示和示例。谢谢什么是ati?请注意,根据该类型,您的
==
可能会检查引用是否相等,从而使一个类的两个实例不相等,即使它们的所有属性都相等。
Dictionary<object, Picker> bob = new Dictionary<object, Picker>() { { ati, atiPicker}, { pti, ptiPicker }};

void openPicker(object sender, EventArgs e) {
     if (sender != null)          
     {
         var a = sender;
         Picker pkr = bob[sender];
         pkr.Focus();
     }
}
Picker pkr = new Picker();

switch(sender){
    case ati:
        pkr = atiPicker;
        break;
    case pti:
        pkr = ptiPicker;
        break;
    case noa:
        pkr = noaPicker;
        break;
    case prt:
        pkr = prtPicker;
        break;
    case cfs:
        pkr = cfsPicker;
        break;
    case co:
        pkr = coPicker;
        break;
}

pkr.Focus();