首页 > 解决方案 > 定义一个 C# 方法,该方法接受任何可与方括号一起使用的对象

问题描述

我正在实现一种方法,给定通过 DataRowView 或 DbDataReader 检索到的一些数据,水合 DTO。

因此,两个数据源都实现了通过以下方式检索特定字段值的可能性

public object this[string name] { get; }

但是这种行为不受两个类之间的公共接口的限制,所以我不能使用它,并且必须编写两次水合代码而不改变一个位。哪个不好。

public MyDTO Hydrate(DataRowView data)
{
    MyDTO f_return = new MyDTO();
    f_return.Foo = (string)data["foo"];
    f_return.Bar = (uint)data["bar"];
    f_return.Baz = (DateTime)data["baz"];
    return f_return;
}

public MyDTO Hydrate(DbDataReader data)
{
    MyDTO f_return = new MyDTO();
    f_return.Foo = (string)data["foo"];
    f_return.Bar = (uint)data["bar"];
    f_return.Baz = (DateTime)data["baz"];
    return f_return;
}

我是否遗漏了一些 C# 语法,它允许我定义一个方法,该方法将输入限制为可以通过方括号访问的任何对象?

像这样的东西

public MyDTO Hydrate(object[string] data)

提前致谢!

标签: c#methodstypes

解决方案


我是否遗漏了一些 C# 语法,它允许我定义一个方法,该方法将输入限制为可以通过方括号访问的任何对象?

不; 除了使用该索引器创建一个之外,没有用于表达“可索引的东西”的 C# 语法interface,即

interface ISomeInterface {
    object this[string name] {get;}
}

并将自己限制为 的实例,或具有约束的ISomeInterface一些泛型。<T>where T : ISomeInterface


推荐阅读