gpt4 book ai didi

c# - C# (.NET) 中的范围变量是否可行

转载 作者:行者123 更新时间:2023-11-30 13:16:50 25 4
gpt4 key购买 nike

我正在寻找一些类或数据类型以允许我为其定义一个范围。
这是我正在寻找的伪代码:

[Range(0, 75)] int ChildAge;

此范围规则应应用于任何分配此年龄的整数,如下所示

var MotherAge = ChildAge;
MotherAge = 100;

MotherAge 应设置为 75,这正是我要找的。

最佳答案

另一种选择是定义您自己的数据类型来表示年龄值。这种类型可以强制执行约束。

struct Age
{
const int MinAge = 0;
const int MaxAge = 75;

readonly byte value;

public int Value { get { return value; } }

private Age(int value) {
this.value = (byte) Math.Max(MinAge, Math.Min(MaxAge, value));
}

public static implicit operator Age(int value) {
// Throw here if value is out of range, maybe?
return new Age(value);
}

public static implicit operator int(Age age) {
return age.value;
}
}

//usage:
Age childAge = 12; // 12
Age motherAge = 100; // 75

编辑:我要指出的是,将“有损”转换公开为隐式强制转换通常被认为是不好的做法。我应该将 operator int(Age) 转换为 explicit。这将需要编写一个显式转换 Age age = (Age) 100;,它向 API 的消费者宣传该转换不是“身份保留”。这类似于从 longint 或从 doublefloat 的强制转换,范围/精确度,因此该语言要求您对其进行明确说明,以证明您了解自己在做什么。

关于c# - C# (.NET) 中的范围变量是否可行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21436296/

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