2014-06-27 6 views
6

chcę, aby wybrać pole z tabeli Dane dt_branches_global w taki sposób, że jeśli radioButton_QP jest zaznaczone w tabeli danych będzie zawierać pole string inaczej Tabela danych zawierają int pole. To właśnie robię. Ale otrzymuję błąd podczas inicjowania zmiennej Var.Nie można przypisać <null> do niejawnie wpisany zmiennej lokalnej

var AllBranch_IDs = null; 

if (radioButton_QP.Checked == true) 
AllBranch_IDs = dt_branches_global.AsEnumerable().Select(x => x.Field<string>("BusinessSectorID")).ToArray(); 
else 

AllBranch_IDs = dt_branches_global.AsEnumerable().Select(x => x.Field<int>("BusinessSectorID")).ToArray(); 
+1

To dlatego, że jeśli typ 'var' należy wnioskować przez kompilator w czasie kompilacji,' sam null' nie mogą przynieść typ wywnioskować. Nie używaj 'var' ani dołączaj rzutowania na wartość null:' var AllBranch_IDs = (string []) null; '- albo pokazuje kompilatorowi, jaki jest typ. Choć wydaje się, że masz zamiar spotkać się z problemem, że jeden wynik to "string []", a drugi wydaje się być "int []"? –

Odpowiedz

9

Kompilator jest nadal mocno napisany, więc musi określić typ. Kompilator nie może wywnioskować, jaki typ przypisujesz zeru. Później spróbujesz przypisać go do dwóch różnych typów. Tablica int i tablica łańcuchów.

Spróbuj czegoś takiego:

string[] AllBranch_IDs = null; 

if (radioButton_QP.Checked == true) 
AllBranch_IDs = dt_branches_global.AsEnumerable().Select(x => x.Field<string>("BusinessSectorID")).ToArray(); 
else 

AllBranch_IDs = dt_branches_global.AsEnumerable().Select(x => x.Field<int>("BusinessSectorID").ToString()).ToArray(); 
+0

+1 do odgadnięcia dla celów wyświetlania i konwersji z int na ciąg – MicroVirus

3

Jak się stoi, typu nie można wywnioskować z null - null może być każdy rodzaj odniesienia.

czyli problem tutaj

var AllBranch_IDs = null; 

jest to, że kompilator musiałby skanować następujących linii kodu wydedukować rodzaj AllBranch_IDs (co nie jest możliwe w języku C# i tak), i nie będzie działa ze względu na dynamiczny charakter tego typu - przypisujesz go IEnumerable<string> lub IEnumerable<int>).

Można użyć IEnumerable<object> a następnie Box ints:

np

 IEnumerable<object> AllBranch_IDs = null; 

    if (new Random().Next(10) > 5) 
    { 
     AllBranch_IDs = new [] {1,2,3,4}.Cast<object>().ToArray(); 
    } 
    else 
    { 
     AllBranch_IDs = new [] {"hello", "world"}.ToArray(); 
    } 

Deklarowanie go jako dynamic również skompilować, a mianowicie dynamic AllBranch_IDs = null, chociaż konsument wyniku musiałby mieć świadomość, że typ jest dynamiczny.

Powiązane problemy