小编Col*_*itz的帖子

强类型返回泛型函数的适当方法是什么?

我正在编写一个过滤器函数来返回从更大的超类型集合(例如对象)中指定的特定类型.这个想法是我给你一个可枚举的,你举例说明了所有的字符串.你可以这样写,没有泛型:

public static IEnumerable Filter(IEnumerable source, Type type)
{
    List<object> results = new List<object>();

    foreach(object o in source)
    {
        if(o != null && o.GetType() == type)
        {
            results.Add(o);
        }
    }

    return results;
}
Run Code Online (Sandbox Code Playgroud)

如果我们想要返回泛型,有几种不同的方法可以解决它.

作为直接端口:

public static IEnumerable<TResult> Filter<TResult>
                          (IEnumerable source, Type type)
Run Code Online (Sandbox Code Playgroud)

传递'示例':

IEnumerable<TResult> Filter<TResult>
    (IEnumerable source, TResult resultType)
Run Code Online (Sandbox Code Playgroud)

最终我认为最干净的是:

public static IEnumerable<T> Filter<T>(IEnumerable source)
Run Code Online (Sandbox Code Playgroud)

第二种类型将完全使用参数调用(并推断类型):

Filter(myList, "exampleString");
Run Code Online (Sandbox Code Playgroud)

作为最终版本,将使用类型说明符调用:

Filter<string>(myList);
Run Code Online (Sandbox Code Playgroud)

强类型返回泛型函数的适当方法是什么,其中返回类型不会自动隐含在签名中?(为什么?)

(编辑注意:我们的输入没有输入,例如IEnumerable <T>.最好是IEnumerable.这个函数将Ts退出其他类型的整个集合.)

c# generics

5
推荐指数
1
解决办法
502
查看次数

如何获得字符串的所有可能的重叠匹配

我正在研究"Gödel,Escher,Bach"第2章中的MIU系统问题.

其中一条规则称

Rule III: If III occurs in one of the strings in your collection, you may make a new string with U in place of III.

这意味着字符串MIII可以变为MU,但对于其他更长的字符串,可能存在多种可能性[括号中的匹配]:

  • MIIII 可以屈服
    • M[III]I >> MUI
    • MI[III] >> MIU
  • MUIIIUIIIU 可以屈服
    • MU[III]UIIIU >> MUUUIIIU
    • MUIIIU[III]U >> MUIIIUUU
  • MUIIIIU 可以屈服
    • MU[III]IU >> MUUIU
    • MUI[III]U >> MUIUU

显然正则表达式是/(.*)III(.*)/有帮助的,但我似乎无法让它们生成所有可能的匹配,只是它碰巧找到的第一个.

有没有办法产生每一个可能的匹配?

(注意,我可以想办法完全手动完成这个,但我希望有更好的方法使用内置工具,正则表达式或其他方式)

(编辑以澄清重叠的需求.)

javascript regex

4
推荐指数
1
解决办法
2439
查看次数

标签 统计

c# ×1

generics ×1

javascript ×1

regex ×1