c# - 如何重载 Collection(Of T) 的 Items 访问器?

标签 c# .net vb.net generics collections

下面的代码是用 Vb.Net 写的,但我要求一个 Vb.Net 或 C# 示例,无论在答案中。


我有这样一个类型:

Public NotInheritable Class IniKeyCollection : Inherits Collection(Of IniKey)

    Public Sub New()
    End Sub

    Public Shadows Sub Add(ByVal key As IniKey)
    End Sub

    Public Shadows Sub Add(ByVal name As String, ByVal value As String)
    End Sub

    Public Overloads Function Contains(ByVal keyName As String) As Boolean
    End Function

    Public Overloads Function IndexOf(ByVal keyName As String) As Integer
    End Function

End Class

IniKey 是一个具有两个属性的类型:

Public NotInheritable Class IniKey

    Public Property Name As String
    Public Property Value As String

    Private Sub New()
    End Sub

    Public Sub New(ByVal name As String)
        Me.Name = name
        Me.Value = String.Empty
    End Sub

    Public Sub New(ByVal name As String, ByVal value As String)
        Me.Name = name
        Me.Value = value
    End Sub

End Class

我想做的是向 IniKeyCollection 添加一个重载,以通过键名访问 IniKey 元素。

我的意思是,不是默认使用索引:

Dim col As New IniKeyCollection
Dim item As IniKey = col(index:=0)

使用字符串:

Dim col As New IniKeyCollection
Dim item As IniKey = col(keyName:="name")

...然后在内部(尝试)返回与该键名匹配的元素。

我需要为此操作的基本成员是什么?我该怎么做?

最佳答案

您要查找的 C# 语言语法项称为索引器。

class IniKeyCollection : Collection<IniKey>
{

    private IniKey[] arr = new IniKey[100];

    public IniKey this[string name]
    {
        get
        {
            return arr.Where(x => x.Name == name).DefaultIfEmpty(null).Single();
        }
        set
        {
            //Not implemented
        }
    }
}

您可以在以下网址了解更多信息:MSDN - C# Programming Guide (Indexers)

关于c# - 如何重载 Collection(Of T) 的 Items 访问器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34332511/

相关文章:

.net - 如何在 LINQ 语句中使用 DateTime.TryParseExact

VB.NET 尝试将泛型 Invoke 方法修改为泛型 BeginInvoke 方法,出现意外问题

vb.net - 如何更改 GroupBox 文本的前景色而不更改其子前景色?

c# - c# dotnet linux 中的 Postgresql 数据库连接代码

c# - GenericArguments[0], 'MvcApplication66.Controllers.HomeController+Info' , 在 'System.Nullable` 1[T ]' violates the constraint of type parameter ' T'

c# - 在没有 MQ 客户端的情况下使用 XMS .Net 连接到 MQ

java - VB.NET 中的 vector 与列表

c# - 使用ajax在MVC项目中不起作用时的Azure blob下载

c# - 如何删除 Visual Studio 中调试器建议的约束

c# - Quartz.net - 无法加载文件或程序集 Common.Logging Version=3.0.0.0