c# - 如何实现 Int32 的模拟?
问题描述
这个问题已经在严重的变化中被问到了。
基本上是:如何通过 C# 中的常量初始化结构?
答案是 - 在 c# 中是不可能的。
但是...我可以写
public class TModel2
{
public const Int32 R32 = 32;
public const Int32 R33 = 33;
}
[TestMethod]
public void TestMethod1()
{
Int32 currentModel = TModel2.R33;
switch (currentModel)
{
case TModel2.R32:
break;
case TModel2.R33:
break;
}
}
如果我检查 Int32 的来源,它被定义为结构。我可以轻松地重复 Int32 的代码并将其命名,例如 TModelItem。我只想写:
public class TModel1
{
public const TModelItem R32 = 32;
public const TModelItem R33 = 33;
}
[TestMethod]
public void TestMethod2()
{
TModelItem currentModel = TModel1.R33;
switch (currentModel)
{
case TModel1.R32:
break;
case TModel1.R33:
break;
}
}
但我无法让这个工作。是的,TModelItem 是重复的 Int32 并且代码甚至没有编译。
我如何使它工作?或者什么可以用来满足我的需求?我需要 int 或 long int 或 string 作为基础。
解决方案
就像已经提到的评论一样,这是不可能的。
我不知道这是否满足您的需求。但是你可以做的是这样的:
public readonly struct TModelItem
{
public int Integer { get; }
public TModelItem(int integer)
{
Integer = integer;
}
public static implicit operator TModelItem(int integer)
{
return new TModelItem(integer);
}
public static implicit operator int(TModelItem tModelItem)
{
return tModelItem.Integer;
}
}
public class TModel1
{
public static readonly TModelItem R32 = 32;
public static readonly TModelItem R33 = 33;
}
[TestMethod]
public void TestMethod2()
{
TModelItem currentModel = TModel1.R33;
switch (currentModel)
{
case 32:
break;
case 33:
break;
}
}
推荐阅读
- r - ggplot - 如何制作关于性别的错误栏
- r - 使用高斯/正态分布钟形曲线投掷 100 个骰子的概率分布
- sql - 无法在 SQL 中除以两个单独列表的计数,一直返回 1
- javascript - 使用 cytoscape.js 的元素数组为空
- c# - 此站点无法从 dotnet linux 提供安全连接 asp.net core
- php - 每 X 分钟调用和运行 Ajax
- python - Heroku 应用程序成功部署,但在加载站点时收到应用程序错误
- node.js - Spotify API 授权授予流程状态 415
- c++ - 计算 3 位数字的位数的阶乘总和
- python-3.x - 如何用 NaN 替换异常值,同时在 python 中使用 pandas 保持行完整?