2013-03-13 17 views
5

Jeśli ustawisz ListItem.Value na wartość przed ustawieniem jej wartości Text, zarówno Text, jak i zostaną ustawione na tę samą wartość. Mogę to obejść, ale chcę tylko wiedzieć, dlaczego tak się dzieje? Czy dlatego, że coś "trzeba" ustawić na ekranie? I po co nadpisywać, gdy domyślną wartością jest pusty ciąg.Wartość ListItem.Value zastępuje tekst, jeśli nie jest ustawiona

.Net 3,5

ListItem li = new ListItem(); 
li.Value = "abc"; //Text is now = "abc" 
li.Text = "def"; 
li.Value = "qwe"; //Text remains "def" 
+0

Czy jesteś w 100% pewien, że przed pierwszym przydziałem tekst jest w rzeczywistości ciągiem.Empty i not null? –

+0

@DavidePiras, nie chodzi o to, że nie jestem pewien fragmentu kodu, ale to jest kod EXACT, który uruchomiłem, aby przetestować tę teorię. – gunr2171

Odpowiedz

7

To dlatego getter właściwości Text jest realizowany w następujący sposób:

get 
{ 
    if (this.text != null) 
    { 
     return this.text; 
    } 
    if (this.value != null) 
    { 
     return this.value; 
    } 
    return string.Empty; 
} 

MSDN:

użyć właściwości Text, aby określić czy określ tekst wyświetlany w sterowaniu listy dla elementu reprezentowanego przez ListItem. Uwaga: Jeśli właściwość Tekst zawiera wartość null, przystawka get zwraca wartość właściwości wartości Wartość. Jeśli właściwość Value z kolei zawiera wartość NULL, zwracana jest wartość String.Empty.

Obiekt Value jest na odwrót:

Jeśli właściwość zawiera wartość null, akcesor get zwraca wartość właściwości Text. Jeśli właściwość Text z kolei zawiera wartość , zwracana jest wartość String.Empty.

+0

dzięki temu kodowi właściwość text powinna zwrócić ustawioną właściwość drugiej wartości. a on powiedział, że tak nie jest. Właściwość tekstowa nadal pozostaje – Elior

+1

@Elior: Dlaczego? Ustawił właściwość Text, zanim ustawi drugą właściwość wartości. Tak więc w tej chwili getter z 'Text' zwraca faktyczny tekst. Tylko jeśli jedna z tych właściwości nie jest ustawiona, ta właściwość zwraca drugą (już) ustawioną właściwość. Jeśli obie właściwości mają wartość NULL, zwracana jest wartość string.empty. Jest to wspólny wzorzec, jeśli dwie właściwości są powiązane, a co najmniej jeden powinien zostać zwrócony. –

+0

oops .. masz rację ... przejrzałem twoją odpowiedź .. przepraszam .. :) – Elior

Powiązane problemy