微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 C# 中使用 gettext 复数定义函数?

如何解决如何在 C# 中使用 gettext 复数定义函数?

我必须在我的 C# 程序中添加一些外部 C 代码,即来自 gettext PO 文件的复数计算: 例如

nplurals=2; plural=(n != 1);

nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;

要使用这些,我必须定义 nnpluralspluralnnplurals 是简单的整数,不是问题;但是,当我定义 int plural 以及将其定义为 bool plural 时,总是会出现编译器错误

原因很明显:C 不知道真正的 bool - 在 C 中所有 bool 都是整数,您可以对它们进行数值和逻辑运算。 C# 中的布尔处理是不同的 - 您不能对整数进行 && 之类的逻辑运算,也不能对布尔值进行数值运算。

有没有办法在不改变它们的情况下使用这些函数

解决方法

是的,这很简单。 定义一个模仿 C 布尔处理的结构:

public struct CBool
{
    private int m_value;
    public static implicit operator bool(CBool cb) => cb.m_value != 0;
    public static implicit operator int(CBool cb) => cb.m_value;
    public static implicit operator CBool(int val) => new CBool(val);
    public static implicit operator CBool(bool val) => new CBool(val);
    public CBool(int val = 0) { m_value = val; }
    public CBool(bool val) { m_value = val ? 1 : 0; }
}
...
CBool plural;

这个结构体的行为就像一个 C 的“bool”——你可以用它做数值和逻辑运算,比如 plural = trueplural = 7 但是,由于它与通常的 C# 规则相矛盾并且在性能方面存在问题,因此它应该仅用于上述特殊情况。对于常见的 int/bool 转换,应使用通常的 Convert 方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。