私は古いプロジェクトに取り組んでおり、長年にわたって何人かの人々がパッチを適用しています。一部の場所ではSelectedValueプロパティを使用しており、他の場所ではSelectedItem.Valueを使用しています。
質問: Is SelectedValue
は単なるsyntactic sugarSelectedItem.Value
またはSelectedValue
の動作フードの下で異なる?どちらが優れたパフォーマンスを発揮しますか?
編集: SelectedItem.TextはSelectedItem.Valueに置き換えられました
SelectedValue
は、SelectedItem.Value
と同じ値を返します。
SelectedItem.Value
とSelectedItem.Text
の値は異なる場合があり、パフォーマンスはここでは要因ではなく、これらのプロパティの意味のみが重要です。
<asp:DropDownList runat="server" ID="ddlUserTypes">
<asp:ListItem Text="Admins" Value="1" Selected="true" />
<asp:ListItem Text="Users" Value="2"/>
</asp:DropDownList>
ここでは、ddlUserTypes.SelectedItem.Value == ddlUserTypes.SelectedValue
と両方が値「1」を返します。
ddlUserTypes.SelectedItem.Text
は「Admins」を返しますが、これはddlUserTypes.SelectedValue
とは異なります
編集
フードの下では、SelectedValueは次のようになります
public virtual string SelectedValue
{
get
{
int selectedIndex = this.SelectedIndex;
if (selectedIndex >= 0)
{
return this.Items[selectedIndex].Value;
}
return string.Empty;
}
}
selectedItemは次のようになります。
public virtual ListItem SelectedItem
{
get
{
int selectedIndex = this.SelectedIndex;
if (selectedIndex >= 0)
{
return this.Items[selectedIndex];
}
return null;
}
}
これら2つのプロパティの大きな違いの1つは、SelectedValue
にはないので、SelectedItem
にもsetterがあることです。 SelectedValue
のgetterは、コードを記述する際により高速であり、実行パフォーマンスの問題について議論する本当の理由はありません。また、SelectedValueの大きな利点は、バインディング式を使用する場合です。
編集データバインディングシナリオ(SelectedItem.Valueは使用できません)
<asp:Repeater runat="server">
<ItemTemplate>
<asp:DropDownList ID="ddlCategories" runat="server"
SelectedValue='<%# Eval("CategoryId")%>'>
</asp:DropDownList>
</ItemTemplate>
</asp:Repeater>
2つの重要な違い(Reflectedコードに表示)は、SelectedValueは何も選択されていない場合に空の文字列を返しますが、SelectedItem.ValueはNullReference例外をスローすることです。
両方とも異なります。 SelectedValue
プロパティは選択中のアイテムの実際の値を提供しますが、SelectedItem.Text
は表示テキストを提供します。たとえば、ドロップダウンには次のようなアイテムがあります
<asp:ListItem Text="German" Value="de"></asp:ListItem>
したがって、この場合、SelectedValue
はde
になり、SelectedItem.Text
は 'German'になります
編集:
その場合、それらは両方とも同じです...原因SelectedValue
は、ドロップダウンで現在選択されているアイテムに保存されている値を提供し、SelectedItem.Value
は現在選択されているアイテムの値になります。
したがって、どちらも同じ結果をもたらします。
DroupDownリストには、2つのアイテム追加プロパティがあります。
1)テキスト2)値
テキストプロパティを取得する場合は、selecteditem.textを使用します。
値プロパティを選択する場合は、selectedvalueプロパティを使用します
あなたの場合、私は値とテキストプロパティの両方が同じであるため、uがselectedvalueまたはselecteditem.textを使用するかどうかは関係ありません
両方が異なる場合、異なる結果が得られます
SelectedItem.Textの使用に注意してください...アイテムが選択されていない場合、SelectedItemはnullになり、SelectedItem.Textはnull値の例外を生成します。
.NETは、選択された項目がないときにString.Emptyを返すSelectedValueプロパティのようなSelectedTextプロパティを提供する必要がありました。