当前位置:  开发笔记 > 编程语言 > 正文

使用C#中的典型get set属性...带参数

如何解决《使用C#中的典型getset属性带参数》经验,为你挑选了1个好方法。

我想在C#中做同样的事情.有没有在C#中使用参数的属性,就像我在这个VB.NET示例中使用参数'Key'一样?

Private Shared m_Dictionary As IDictionary(Of String, Object) = New Dictionary(Of String, Object)
Public Shared Property DictionaryElement(ByVal Key As String) As Object
    Get
        If m_Dictionary.ContainsKey(Key) Then
            Return m_Dictionary(Key)
        Else
            Return [String].Empty
        End If
    End Get
    Set(ByVal value As Object)
        If m_Dictionary.ContainsKey(Key) Then
            m_Dictionary(Key) = value
        Else
            m_Dictionary.Add(Key, value)
        End If

    End Set
End Property

谢谢



1> Konrad Rudol..:

无论如何在C#中使用带参数的属性

不可以.您只能在C#中使用参数提供默认属性,以建模索引访问(如在字典中):

public T this[string key] {
    get { return m_Dictionary[key]; }
    set { m_Dictionary[key] = value; }
}

其他属性不能有参数.请改用功能.顺便说一句,它建议在VB中执行相同操作,以便其他.NET语言(C#...)可以使用您的代码.

顺便说一句,您的代码不必要地复杂化.四件事:

您无需转义String标识符.直接使用关键字.

为什么不用""

使用TryGetValue,它更快.您查询字典两次.

您的setter不必测试该值是否已存在.


Public Shared Property DictionaryElement(ByVal Key As String) As Object
    Get
        Dim ret As String
        If m_Dictionary.TryGetValue(Key, ret) Then Return ret
        Return "" ' Same as String.Empty! '
    End Get
    Set(ByVal value As Object)
        m_Dictionary(Key) = value
    End Set
End Property


@ Stimul8d:我不跟随.怎么"不"明确?我在两者之间看到的唯一区别(而且,恕我直言,程序员*应该*看到)是`String.Empty`是六倍长,因此它需要六倍的空间并且需要大约六倍的时间来读取它使代码差六倍.作为比较,就好像我们会使用`Int32.Zero`而不是'0`.
推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有