Wartość nie może być zerowa.

Wartość nie może być zerowa.
O1
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam. Mam taki warunek:

Kopiuj
if ((words = wcfServiceClient.getDictionary().ToList()) == null)

Metoda getDictionary zwraca obiekt typu List<String> czasem zmienna może być nullem. Właśnie dopóki nie przesyłam nulla wszystko jest ok, ale jeśli zwróci null to wtedy powyższy if rzuca mi, że wartość nie może być zerowa. Jak to obejść?

Jeszcze druga sprawa jak dotąd więcej miałem do czynienia z Javą i zdziwiło mnie w C#, że jeśli metoda zwraca List<String> to przy jej przypisaniu do obiektu words tak jak wyżej, który jest

Kopiuj
List<String> words

muszę używać metody toList()

Kopiuj
 a nie wystarczy samo coś takiego: <code class="csharp">words = wcfServiceClient.getDictionary()
somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
1

Jeśli wcfServiceClient.getDictionary() zwróci null, to jeśli wywołasz na nim ToList, to oczywiste, że program się wykrzaczy. Musisz najpierw sprawdzić, czy getDictionary() nie zwraca null, a potem dopiero wywołać ToList.

Co do Twojego zdziwienia - jeśli metoda 'getDictionaryzwracaList<string>, to nie musisz żadnego ToListwywoływać. Z tymże, nazwa tej metody sugeruje, że zwracaDictionary, a nie List''.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
if(((dict = wcfServiceClient.getDictionary()) == null) || ((words = dict.ToList()) == null))
O1
  • Rejestracja: dni
  • Ostatnio: dni
0
somekind napisał(a):

Jeśli wcfServiceClient.getDictionary() zwróci null, to jeśli wywołasz na nim ToList, to oczywiste, że program się wykrzaczy. Musisz najpierw sprawdzić, czy getDictionary() nie zwraca null, a potem dopiero wywołać ToList.

Co do Twojego zdziwienia - jeśli metoda 'getDictionaryzwracaList<string>, to nie musisz żadnego ToListwywoływać. Z tymże, nazwa tej metody sugeruje, że zwracaDictionary, a nie List''.

Ale jeśli nie dam toList() a tylko

Kopiuj
if (((words = wcfServiceClient.getDictionary()) == null))

to podkreśla mi getDictionary() na czerwono i sygnalizuje błąd:

cannot implicitly convert type string[] to system.collections.generic.list<string>
a metoda getDictionary zwraca List<String> oto jej deklaracja:

Kopiuj
public List<String> getDictionary()

words też jest typu List:

Kopiuj
List<String> words = null;
somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
1

Komunikat cannot implicitly convert type string[] to system.collections.generic.list<string> świadczy w tym przypadku o tym, że getDictionary() zwraca tablicę, a nie listę. Masz coś namieszane z tymi metodami, jesteś pewien, że na dobrą patrzysz?

O1
  • Rejestracja: dni
  • Ostatnio: dni
0

No właśnie też mi to nie pasowało. Jest to aplikacja WCF i te metoda pochodzi z serwisu po dodaniu addServiceReference:

Interfejs serwisu:

Kopiuj
namespace WcfService1 {
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IService1 {

        [OperationContract]
        void setPassword(String pass);

        [OperationContract]
        String getPassword();

        [OperationContract]
        List<String> getDictionary();

    }
}

Ale teraz zauważyłem, kiedy usunąłem referencje do serwisu i chciałem dodać od nowa do klienta referencje do serwisu to zauważyłem, że na dole dostałem taki warning:

Warning 1 The 'bindingConfiguration' attribute is invalid - The value 'BasicHttpBinding_IService1' is invalid according to its datatype 'serviceBindingConfigurationType' - The Enumeration constraint failed. C:\Users\Piotr\documents\visual studio 2013\Projects\Client\Client\App.config 14 39 Client

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.