相关疑难解决方法(0)

对C#泛型的反约束

Phil Haack尝试null或空合并的启发,我试图为string对象和IEnumerable<T>接口编写几个扩展方法,以简化null或emtpy ckecking.但是,我遇到了问题:当我试图调用string版本时AsNullIsEmpty,编译器将我的字符串视为一个IEnumerable<char>,当然会给出错误的返回类型.

有没有什么办法对的定义把"反约束" IEnumerable的版本,这样我可以告诉编译器使用一个每当类型T不是 string?就像是

public static IEnumerable<T> AsNullIfEmpty(this IEnumerable<T> items)
    where T !: string
Run Code Online (Sandbox Code Playgroud)

我知道我可以更改其中一个的名称,但我希望具有相同的名称以保持一致性.

更新:事实证明我的扩展方法的问题是通过另一种方式解决的,通过修复一个简单而愚蠢的错误(我正在使用str.IsNullOrEmpty(),扩展方法IEnumerable<T>,而不是string.IsNullOrEmpty(str)......)但是因为对泛型的反约束的问题是还是一个有趣的,我不会删除它.

c# generics constraints

3
推荐指数
1
解决办法
231
查看次数

标签 统计

c# ×1

constraints ×1

generics ×1