2014-09-26 3 views
-3

Java код:Java Хеш в C# словарь

//BleDevice is a class 
public Hashtable<String, BleDevice> meusBLEs = new Hashtable<String, BleDevice>(); 

//BleRequest is another class 
BleRequest currentRequest = null; 

//deviceAddress is a string from BleRequest 
BleDevice ble=meusBLEs.get(currentRequest.deviceAddress); 

Я использую хэш-таблицу и установите значение переменной BleDevice;

Теперь то, что я пытаюсь сделать в C#, это то же самое, но с использованием словаря:

public Dictionary<String, BleDevice> meusBLEs = new Dictionary<String, BleDevice>(); 

BleRequest currentRequest = null; 

BleDevice ble = meusBLEs.get...//HERE'S IS WHAT I DON`T KNOW HOW TO DO. THE METHOD GET DON`T EXIST 

Я не могу использовать Hashtable в C# потому что я не могу установить параметр как Hashtable Java.

ответ

1

Просто сделайте это: BleDevice ble = meusBLEs[the_key_you_have].

4
BleDevice ble = meusBLEs[currentRequest.deviceAddress]; 
+1

FYI, в отличие от Java, этот метод извлечения значения вызывает исключение, если запрашиваемый ключ отсутствует в словаре. –

2

Поведение немного отличается в .NET, чем Java; в частности, хотя метод Java get() может возвращать null для отсутствующих значений, такое соглашение не применимо в .NET, где тип значения может не быть ссылочным типом.

Есть на самом деле два стандартных способа для получения значения:

BleDevice ble = meusBLEs[currentRequest.deviceAddress]; 

Заявление выше сгенерирует исключение, если значение ключа currentRequest.deviceAddress нет в словаре. Кроме того, вы можете использовать метод TryGetValue:

BleDevice ble; 
/* bool found = */ meusBLEs.TryGetValue(currentRequest.deviceAddress, out ble); 

Если TryGetValue возвращает false, значение параметра out будет default(TValue).

+0

Вы можете использовать следующий метод расширения для воспроизведения поведения Java именно: внутренний статический TValue GetValueOrNull (это IDictionary словарь, ключ TKey) \t { \t \t TValue RET; \t \t словарь.TryGetValue (ключ, из ret); \t \t return ret; \t} –