我正在使用Visual Studio 2022,希望创建各种类型的数据,这些数据需要被约束为特定的值。具体来说,我正在创建公升、pH值和其他与液体相关的数据的类型。为此,我希望创建自定义类型,当我在VS2022中键入代码时,这些类型会被检查,类似于当您尝试使用负整数时,C#期望使用uint。或者尝试(uint)-1
时出现错误。
我尝试过创建一个可以强制转换这些值的结构体,但它只在运行时检查,这意味着我必须首先运行代码,然后才能捕捉到从负值强制转换并显示错误。
未静态检查以下结构的转换。
public struct liters {
private readonly double v;
public liters(double v) {
if (v is < 0) { throw new ArgumentOutOfRangeException(nameof(v)); }
this.v = v;
}
public static implicit operator liters(double v) { return new liters(v); }
public static implicit operator double(liters liters) { return liters.v; }
}
1条答案
按热度按时间z9smfwbn1#
您需要了解. NET编译器平台(Roslyn)和自定义code analyzers,这是自定义编译时检查的主要工具,尽管编写一个工具并不容易。
在您的情况下,您可以尝试为强制转换表达式编写分析器,该分析器将检查发生强制转换的目标类型和文本。
一些有用的链接:
StyleCop.Analyzers
,您可以从中获得灵感)