2017-09-01 95 views
0

我正在構建一個物聯網應用程序,需要檢測何時插入和移除可移動設備。嘗試創建DeviceWatcher對象時出現以下錯誤。不能隱式轉換類型Windows.Devices.Enumeration.DeviceWatcher到DeviceWatcher

DeviceWatcher.CreateWatcher()方法的類型爲DeviceWatcher。爲什麼我會得到這個錯誤?

我不確定是什麼問題,我不知道如何解決這個問題。任何人都可以在此提供見解

DeviceWatcher watcher = DeviceInformation.CreateWatcher(DeviceClass.PortableStorageDevice); 

錯誤:

無法隱式轉換類型 'Windows.Devices.Enumeration.DeviceWatcher' 到 'NamespaceName.DeviceWatcher'

應用類型:

的Windows 10背景應用。週年紀念版。

艙單能力:

可移動存儲

回答

1

嘗試隱變量聲明:

var watcher = DeviceInformation.CreateWatcher(DeviceClass.PortableStorageDevice); 

進一步解釋

通過隱式聲明你實際上是讓編譯器做它的魔力(一個聰明的猜測)並且導出變量的類型be根據右側返回的數據類型進行聲明。基本上你的錯誤是假設watcher變量應該是DeviceWatcher類型,但它不是。至少不是你輸入的那個。療法是您using報表內可能發生衝突,並DeviceWatcher默認爲不是Windows.Devices.Enumeration.DeviceWatcher不同的東西是由DeviceInformation.CreateWatcher()

+0

這解決了這個問題,但爲什麼我需要隱式聲明呢? – Jnr

+0

@Jnr,因爲您的代碼中有兩個名爲'DeviceWatcher'的類,名爲'NamespaceName.DeviceWatcher',另一個在框架中的'Windows.Devices.Enumeration.DeviceWatcher'中。當你輸入'DeviceWatcher'時,它使用了你的代碼中的一個,但是這個函數從框架中重新使用它。使用'var'可以自動從框架中選擇一個。 –

1

使用var回到正確的類型是一個選項。你也可以指定明確的命名空間:

Windows.Devices.Enumeration.DeviceWatcher watcher = DeviceInformation.CreateWatcher(DeviceClass.PortableStorageDevice);