gpt4 book ai didi

C#:接口(interface)中的枚举

转载 作者:IT王子 更新时间:2023-10-29 04:48:47 24 4
gpt4 key购买 nike

我已经看到几个与这个问题类似的话题,但没有一个真正回答我想问的问题。

对于初学者来说,不幸的是,我很遗憾地使用现有的 API 代码,虽然可能有更好的方法来完成我所询问的事情,但我被锁定在以与现在类似的方式进行操作,因为向后兼容性是不可协商的。

我有一个响应类,当前包含一个错误代码枚举和一个字符串描述。错误代码定义了一组相当不错且完整的响应,这些响应在语义上都与使用它们的操作非常相关。

不幸的是,我现在必须为一组相似的 API 对象添加一个不同的工作流,这将需要一个字符串描述,这很好,而且还需要一个由一组完全不相关的错误代码组成的枚举错误代码。错误代码(以及对象模型的其他方面)将在许多相同的类中使用,因此最好有一个接口(interface),以便我可以通过相同的框架运行对象。

这里的目的是制定一个契约(Contract),上面写着“我有一个错误代码,以及对该错误代码的描述。”

但是,据我所知,没有办法将项目添加到界面,例如

public interface IError
{
enum ErrorCode;
string Description;
}

也没有办法表达

public interface IError<T> where T: enum
{
T ErrorCode;
string Description;
}

有人以前遇到过类似的事情吗?

最佳答案

是的,我遇到过这种情况。不是在这种特殊情况下,而是在其他 Stack Overflow 问题中,like this one . (我不会投票将这个作为副本关闭,因为它略有不同。)

可以表达您的通用接口(interface) - 只是不能在 C# 中。你可以在 IL 中毫无问题地做到这一点。我希望可以在 C# 5 中删除该限制。据我所知,C# 编译器实际上完美地正确处理了约束。

如果您真的想将此作为一个选项,您可以使用类似于 Unconstrained Melody 中的代码,我得到的一个库,它公开了具有这种难以生成的约束的各种方法。它有效地使用 IL 重写 - 它很粗糙,但它适用于 UM,并且可能也适用于您。不过,您可能希望将接口(interface)放入单独的程序集中,这会有些尴尬。

当然,你可以让你的界面只有 T : struct 而不是......这不是理想的,但它至少会限制类型某种程度上 .只要您能确保它没有被滥用,它就可以正常工作。

关于C#:接口(interface)中的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3153217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com