相关疑难解决方法(0)

C#中的枚举类型约束

可能重复:
任何人都知道缺少枚举通用约束的好方法?

C#不允许对Enums 进行类型约束的原因是什么?我确信疯狂背后有一种方法,但我想明白为什么不可能.

以下是我希望能够做到的(理论上).

public static T GetEnum<T>(this string description) where T : Enum
{
...
}
Run Code Online (Sandbox Code Playgroud)

.net c# enums

149
推荐指数
4
解决办法
5万
查看次数

是否已经内置了这些功能性的C#/ .NET构造?g(h())或

public static Func<V> To<T, V>(this Func<T> g, Func<T, V> h)
{
    return () => h(g());
}

public static Func<T> ToIdentity<T>(this T t)
{
    return () => t;
}
Run Code Online (Sandbox Code Playgroud)

在延迟评估时,我有时会使用这些和其他人.这些已经在.net库中吗?

编辑:

以下是一个示例用法:

public static string SuffixColumn(this string v, string suffix, int columns)
{
    return
    v.ToIdentity()
        .ToScrubbedHtml()
        .ToFormat(() => "{0} " + suffix.ToLower().PadLeft(columns, ' '))
        .ToErrorText(v, suffix, columns)();
}
Run Code Online (Sandbox Code Playgroud)

ToErrorText将'v'检查为合法(非错误代码,非null等),如果好,它运行链接在Func中,如果不好则生成故障安全文本结果.如果v,后缀或列不好,则永远不会调用ToFormat.(因此延迟/未评估的使用).

ToFormat几乎是提供的Func和string.Format的组合.ToIdentity用于将v提升为Func,然后链中的所有内容都基于T的一些Func.

.net c# monads functional-programming

10
推荐指数
1
解决办法
1083
查看次数

我可以动态使用模板吗?

我有一节课:

class abc <T> {
  private T foo; 
  public string a {
    set {
       foo = T.parse(value);
    }

    get{
       return foo.toString();
    }

  }
}
Run Code Online (Sandbox Code Playgroud)

但是T.parse命令给了我一个错误.任何人都可以做我想做的事情?

我使用它作为其他一些派生类的基类.

编辑:

我结束了我们的工作:

Delegate parse = Delegate.CreateDelegate(typeof(Func<String, T>), typeof(T).GetMethod("Parse", new[] { typeof(string) }));
Run Code Online (Sandbox Code Playgroud)

我在构造函数中执行过一次

然后我在我的财产中执行以下操作:

        lock (lockVariable)
        {
            m_result = (T)parse.DynamicInvoke(value);
            dirty = true;
        } 
Run Code Online (Sandbox Code Playgroud)

c#

2
推荐指数
1
解决办法
307
查看次数

标签 统计

c# ×3

.net ×2

enums ×1

functional-programming ×1

monads ×1